<p>缩进有问题,因此不是所有的东西都在适当级别的试用函数中运行。您可能可以删除异常处理来更直接地检查是否做出了响应。然后使用<code>else:</code>子句处理<code>for</code>循环完成但未按下任何键时发生的情况。这避免了必须处理在任何给定帧上发生的非响应的逻辑(如果不久之后将发生响应,则这可能没有任何意义)。你知道吗</p>
<p>类似这样的通用伪代码:</p>
<pre><code># define window
win = visual.Window(fullscr=True)
# function to draw instructions (probably overkill unless run more than once)
def instruct(instructions = 'xxx'):
# as you have above
# function to run each trial
def trial(number = -999, sound_name = 'A'):
sound = Sound.sound(sound_name)
if sound_name in ["Klik.wav", "Press.wav", "Throw.wav"]:
condition = "press"
else:
condition = "no_press"
event.clearEvents()
sound.play()
for frame in range(90):
time_start = win.flip()
keys = event.getKeys(keyList=['space', 'escape'], timeStamped = True)
if keys: # if a non-empty list returned:
key, time_key = keys[0]
rt = time_key - time_start
sound.stop() # ready to start next trial immediately
if key == 'escape':
core.quit()
if condition == "press":
return {'accuracy':1, 'rt':rt}
else:
return {'accuracy':0, 'rt':rt}
else: # the loop ended without a key press
if condition == "press":
return {'accuracy':0, 'rt':'NA'}
else:
return {'accuracy':1, 'rt':'NA'}
####
# run the experiment:
####
####
# show the instructions:
####
instruct('some instructions')
####
# run the trials:
####
for trial_num in range(10):
# run each trial and get the results.
# I'm not sure where you're getting your sound values
# but they could be indexed from a list using the trial number:
result = trial(number=trial_num, sound_name=sound_names[trial_num])
# then save the values from the returned dictionary to a file
</code></pre>