Ожидание пользовательского ввода во временных вложенных циклах - PullRequest
0 голосов
/ 26 мая 2018

Я хочу запрограммировать задачу ответа на сигнал остановки.У меня 90% этого в сумке, но у меня действительно есть проблемы с обработкой событий клавиатуры во вложенных циклах ... Я пробовал pygame ... Но он либо не записывает ответ, либо зависает в цикле.

Этот цикл представляет одно испытание, которое состоит из объекта, представленного на экране в течение 1,25 секунд (эфир квадрат или круг).

Если это квадрат, участник должен нажать«z», если это круг, они должны нажать «/» ... Он циклически просматривает индексы массива, которые содержат, какой объект появится на экране, и будет ли сигнал или нет (beeplist[i])

В некоторых испытаниях будет звучать звуковой сигнал в переменное время (SSD ... Задержка сигнала остановки определяется вне этого цикла, который затем изменяется в зависимости от производительности).Если есть звуковой сигнал, человек, как ожидают, не ответит.(Я не хочу ждать ответа)

Итак ... Я хочу записать ответ человека (какую кнопку он нажимает) и время реакции.Я хочу, чтобы первый ответ записывался только.

Пожалуйста, кто-нибудь может мне помочь разобраться, как я могу получить ответ от клавиатуры и время реакции, пожалуйста?

Вот что я получил:

presses = None
starttime = time.time()
trial_ST.append(starttime)
end_time = time.time() + 1.250 #makes sure each trial is only 0.5s in total
StopSignalTime = starttime + SSD # generates the time at which the SS is to be presented (if it is)
while time.time() < SSD:
    presses = ####### Need this to wait for specific keypress (either z or /)
    response.append(presses) #write the response to an array
if beeplist[i] == 1:
    tone.play()
while time.time() < end_time:
    if presses is None:
        presses = ####### Need this to wait for specific keypress (either z or /)
        response.append(presses) #write the response to an array
SSDlist = SSDlist.append(SSD)
if beeplist[i] == 1:
    if presses == None:
        SSD = SSD + 0.05
    else:
        SSD = SSD = 0.05
print "end of block iteration"
blockiteration = blockiteration + 1
startTask = False
restblock()

1 Ответ

0 голосов
/ 26 мая 2018

Вы должны выйти из цикла, если обнаружите нажатие, но я не могу выполнить это условие выхода в цикле while: -)

Также, если вы обнаружите «правильное» нажатие, вы можете потратить времяс помощью time.time () и вычтите начальное время, чтобы получить фактическую разницу во времени

time_diff = time.time() - starttime
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...