Моя функция «hello()» просто отображает стимул на экране в течение 2 секунд, в течение которого можно нажать клавишу. Если клавиша не нажата, она ждет 1 секунду, а затем снова запускает функцию снова и снова, если клавиши не нажаты. Когда нажата клавиша, она выходит из цикла while и печатает да. По какой-то причине, если я позволю функции цикла переходить, например, 4 раза, прежде чем нажимать клавишу, я тогда получаю 5 строк печати одновременно, тогда как я бы только ожидал. Может ли кто-нибудь сказать мне, почему это, кажется, хранит заявления печати, несмотря на то, что я ожидаю, что заявление о печати никогда не будет достигнуто, пока я не нажал клавишу?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); if isststance (keys, types.NoneType) или ключи [0] == 'escape': quit(); 'где' NoneType' используется для этих строк, чтобы увидеть, нужно ли выходить из одной из наших программ. – brittAnderson