在我的实验中,我展示了随机生成的刺激' x,我需要将其与实验用户提供的密钥进行比较。 基本上,我有两个列表:
顺序是相同的,我的意思是刺激1应该得到“1”和“1”的关键。在列表中有答案。
我已经搜索了几个关于如何比较这两个列表的主题,但到目前为止它还没有工作。
这些是我尝试的选项:
Answerruning = True
while Answerrunning:
if event.getKeys(keyList):
ReactionTime.getTime()
Keys = event.waitKeys()
for givenKey in Keys:
if givenKey == keyList:
answer_stimulus = 2
Answerrunning = False
window.flip(clearBuffer = True)
else:
answer_stimulus = 0
这个选项,但我认为另一个更好:
keyList = []
givenKey = event.getKeys(keyList)
Answerrunning = True
while Answerrunning:
for x in stimulus:
if givenKey in keyList:
ReactionTime.getTime()
answer_stimulus = 2
Answerrunning = False
window.flip(clearBuffer = True)
else:
answer_stimulus = 0
我希望你们中的一位能给我一个关于如何比较那两个en在我窗口上的问题的提示,这将明确实验可以继续。
答案 0 :(得分:3)
你没有提到这一点,但你确实需要使用TrialHandler
对象http://www.psychopy.org/api/data.html来处理变量,逐步执行条件文件(.xlsx或.csv)每次试验一次一排。即不要将刺激和正确的反应值放在列表中:将它们放在外部文件中,让PsychoPy通过试验来管理它们的管理。
如果您在该文件中有一个名为correctResponse
的列,另一个名为stimulusText
的列和一个名为trials
的TrialHandler,那么一些伪代码将如下所示:
trialClock = core.Clock() # just create this once, & reset as needed
# trials is a TrialHandler object, constructed by linking to an
# external file giving the details for each trial:
for trial in trials:
# update the stimulus for this trial.
# the stimulusText variable is automatically populated
# from the corresponding column in your conditions file:
yourTextStimulus.setText(stimulusText)
# start the next trial:
trialClock.reset()
answerGiven = False
while not answerGiven:
# refresh the stimuli and flip the window
stimulus_1.draw() # and whatever other stimuli you have
win.flip() # code pauses here until the screen is drawn
# i.e. meaning we are checking for a keypress at say, 60 Hz
response = event.getKeys() # returns a list
if len(response) > 0: # if so, there was a response
reactionTime = trialClock.getTime()
# was it correct?
if correctResponse in response:
answer = True
else:
answer = False
# store some data
trials.addData('Keypress', response)
trials.addData('KeypressRT', reactionTime)
trials.addData('KeypressCorrect', answer)
# can now move on to next trial
answerGiven = True
PsychoPy代码通常围绕每次刷新绘制到屏幕的周期构建,因此上面的代码显示了在每次试验中,刺激是如何更新一次,但在每次刷新时重新绘制到屏幕上。在此循环中,每次重绘屏幕时都会检查键盘一次。
在你的代码中,你混合getKeys()
和waitKeys()
混合getKeys()
,getKeys()
暂停直到给出响应(因此打破了屏幕刷新周期)。所以一般都要避免后者。此外,当您使用{{1}}时,您必须将结果分配给变量,因为此函数会清除缓冲区。在上方,您使用{{1}}然后再次检查键盘进行跟进。在这种情况下,初始响应将消失,因为它没有存储。
清除泥土?