打破中间蟒蛇的循环

时间:2015-10-17 06:02:27

标签: python-3.x

我正在尝试一个循环,一直保持功能,直到输入一些将打破循环。但是如果我在循环中输入'stop = input()'那么它必须先执行该操作然后再执行其他操作。我的代码是这样的:(它使用了一些我的世界命令。基本上我试图让一个块向下移动20X20平方并让它能够在命令中停止)

from mcpi import minecraft
mc=minecraft.Minecraft.create()
from time import sleep
pos=mc.player.getTilePos
x=pos.x
y=pos.y
z=pos.z
mc.setBlocks(x-10,y,z+30,x+10,y+20,z+30,49)
BB=0
while BB<20:
    BB=BB+1
    sleep(.7)
    mc.setBlock(x,y+(20-BB),z+30,35)
    mc.setBlock(x,y+(21-BB),z+30,49)
    stop=input()
    if stop=='stp':
        break

如果有人输入“stp”,我该如何保持循环?因为目前它会移动一个街区然后停下来等待我输入一些东西。如果我取出最后三行,循环就可以工作。

2 个答案:

答案 0 :(得分:0)

每当您在代码中遇到input()时,Python都将停止,直到收到输入为止。如果您在控制台中运行脚本,则按Ctrl + C将停止执行该程序。 (我假设你是,因为你怎么能输入'stp'?)

答案 1 :(得分:0)

您可以在不同的线程中运行逻辑,并在获得输入时发出此线程的信号。

from mcpi import minecraft
import threading

mc=minecraft.Minecraft.create()
from time import sleep
pos=mc.player.getTilePos
stop = False

def play():
    x=pos.x
    y=pos.y
    z=pos.z
    mc.setBlocks(x-10,y,z+30,x+10,y+20,z+30,49)
    BB=0
    while BB<20:
        BB=BB+1
        sleep(.7)
        mc.setBlock(x,y+(20-BB),z+30,35)
        mc.setBlock(x,y+(21-BB),z+30,49)
        if stop:
            break

t = threading.Thread(target=play)
t.start()
while True:
    s = input()
    if s == 'stp':
        stop = True # the thread will see that and act appropriately