2015-10-17 47 views
0

我想要一個循環保持運行,直到某些輸入會打斷循環。但是,如果我在循環中放入'stop = input()',那麼在做任何其他事情之前,必須先經過這一步。我的代碼是這樣的:(它使用了一些的Minecraft命令基本上我嘗試做一個塊向下移動一個20X20的廣場,它能夠停止在命令中間。)在中間python中打開一個循環

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

的可能的複製[什麼是從終端檢測在python鍵盤輸入的最簡單的方法?](http://stackoverflow.com/questions/13207678/whats-the-simplest-way-of-detecting-鍵盤輸入蟒蛇從終端) – Pynchia

回答

0

只要在代碼中遇到input(),Python就會停止,直到它接收到輸入。如果您在控制檯中運行腳本,則按Ctrl + C將停止執行程序。 (我會假設你是,因爲你怎麼能輸入'stp'?)

+0

是的我想通了,蟒蛇將停止,直到它收到一個輸入值。但是有沒有繞過這種方法?也許用不同的關鍵詞? (除輸入外) –

+0

是的,按Ctrl + C停止一切。嘗試一下! – eyqs

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