如何比较随机' x'一个' getKeys'从列表中

时间:2015-12-15 22:41:22

标签: python random compare psychopy

在我的实验中,我展示了随机生成的刺激' 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在我窗口上的问题的提示,这将明确实验可以继续。

1 个答案:

答案 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}}然后再次检查键盘进行跟进。在这种情况下,初始响应将消失,因为它没有存储。

清除泥土?