在定时嵌套循环中等待用户输入

时间:2018-05-26 00:43:14

标签: python loops nested pygame user-input

我想编写一个停止信号响应任务。我有90%的内容,但我在嵌套循环中处理键盘事件时遇到了真正的问题...我试过pygame ......但它要么不记录响应,要么挂起循环。< / p>

这个循环代表一个试验,它由一个在屏幕上呈现的对象组成,总共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 :(得分:0)

如果您检测到按下,则必须退出循环,但我在while循环中无法退出此条件: - )

此外,如果您检测到“正确”按下,您可以花时间time.time()并减去开始时间以获得实际时差

time_diff = time.time() - starttime