我正在尝试一个循环,一直保持功能,直到输入一些将打破循环。但是如果我在循环中输入'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”,我该如何保持循环?因为目前它会移动一个街区然后停下来等待我输入一些东西。如果我取出最后三行,循环就可以工作。
答案 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