私の関数 'hello()'は、画面に2秒間だけ刺激を表示し、その間にキーを押すことができます。キーが押されていない場合、キーが押されていない場合、1秒間待ってから再度機能を実行します。キーが押されると、whileループを抜けて「はい」と表示されます。何らかの理由で、キーを押す前に関数を4回以上ループさせると、同時に5つの印刷ステムが出力されますが、1つしか期待できません。誰かが私がキーを押すまでプリントステートメントが決して届かないと思うにもかかわらず、プリントステートメントを保管しているように見える理由を教えてもらえますか?Python:キー入力が開始されるまで関数を繰り返す
def hello():
test = 1
running = 1
while running == 1:
for frame in range(short_frames): # 2 seconds
fix.draw()
window.flip()
allKeys = event.getKeys(keyList = ('g','h'))
for thisKey in allKeys:
if thisKey == 'g':
keyTime=core.getTime()
test = 2
elif thisKey == 'h':
keyTime=core.getTime()
test = 2
window.flip()
core.wait(1)
if test == 1: #if no key is pressed
hello() #run the function again
running = 2 #exit out of while loop
print "yes"
for i in range(1):
hello()
core.quit()
window.close()
感謝。これはキーが押されるまでwhileループを維持しますが、whileループだけでなくキーが押されなければ、関数全体を再度実行する必要があります。これが私がhello()内からhello()を呼び出す理由です。私は即座に、印刷せずに関数の先頭に戻ると思っていました。 – Steve
私は再帰に対するすべての警告に同意しますが、もっと簡単にしたいことができると思いますが、キープレスがないことを次のようにテストできます: 'keys = event.waitKeys(maxWait = 1800、 keyList = keyList); isinstance(keys、types.NoneType)またはkeys [0] == 'escape':quit(); 'これらの行には、プログラムの一部を終了するかどうかを示す' NoneType'が使われます。 – brittAnderson