组合条件文件

Combining condition files

我正在进行一项实验,并使用一些编码器和一些构建器构建了它的一部分,但我卡在了一个地方。该实验向人们展示了两个不同的单词列表(列表 A 和列表 B),并且其各自列表中的每个单词在实验开始时随机与一个数字配对。 Psychopy 向参与者展示了单词和数字,重要的是,在他们随机配对后,单词 - 数字对在实验的剩余部分被连接起来。我使用编码器随机化配对并为两个单词列表动态构建条件文件。 Builder 然后使用这些构建的条件文件来呈现刺激(单词和数字)。

这是我卡住的部分。在呈现两个单词列表及其配对数字后,我需要呈现列表 A 和 B 的子集以及之前未呈现的第三个单词-数字对列表。因此,例如,一个人在实验过程中可能会看到这样的东西:

第一次演讲: 清单 A: 弗兰克 - 1,苏珊 - 3

名单B: 鞋子 - 2,肮脏 - 1

第二次展示: frank - 1,鞋子 - 2,酒店 - 4

实验的开始是使用编码器创建单词和数字列表以及编写这两个列表的条件文件。该代码如下:

import random
import csv

studylista=["shoe","bear","balls","dingy"]
pointslista=[1,2,3,4]

listaRand=random.sample(studylista,len(studylista))
listapointsRand=random.sample(pointslista,len(pointslista))

with open('WordsandPointslista.csv','wb') as w:
  writer=csv.writer(w)
  writer.writerow(['studylista','pointslista'])
  for i in range(len(listaRand)):
    writer.writerow([listaRand[i],listapointsRand[i]])

studylistb=["frank","robert","daniel","susan"]
pointslistb=[1,2,3,4]

listbRand=random.sample(studylistb,len(studylistb))
listbpointsRand=random.sample(pointslistb,len(pointslistb))

with open('WordsandPointslistb.csv','wb') as w:
  writer=csv.writer(w)
  writer.writerow(['studylistb','pointslistb'])
  for i in range(len(listbRand)):
    writer.writerow([listbRand[i],listbpointsRand[i]])

我需要之前提供的两个列表的随机子集,以及一个尚未提供的附加列表,供参与者一起查看。还需要保留已经看到的列表的先前词数对。我似乎无法发现如何做到这一点。

我目前有两个单词数字列表,分别在不同的例程中显示,每个例程都有循环。我正在尝试弄清楚如何创建第三个例程,该例程将仅显示一些以前看到的单词-数字对以及一些新的单词-数字对。 谢谢

在上面的代码中,不要创建两个单独的两列 CSV 文件,而是将它们组合成一个四列文件。该文件可以在多个循环中使用。如果我正确理解您的设计,它将首先在一个循环中使用以呈现所有 'A' word/number 对,然后在第二个循环中再次使用以呈现所有 'B' word/number 对。最后,在最后一个循环中使用它来仅显示 'A' & 'B' 对的一个子集。此子集通过循环对话框中的 "Selected rows" 字段应用。随机化在前两个循环中是可选的,因为您已经打乱了行,但在第三个循环中可能有必要随机化以避免以与前两个循环中相同的顺序呈现行。

然后就是第三组word/number对如何处理的问题。最简单的做法是简单地在 A 和 B 集的同时创建它们并将它们粘贴在同一个 CSV 文件中。但在这种情况下,您将需要相同数量的单词和数字,其中一些不会显示,因为在最终循环中仅 运行 通过子集。另一种方法是在第三个循环之前使用第二个代码组件,该组件读取现有文件、打乱行、对其进行子集化,然后添加新列。即做很多 Builder 循环本来会为你做的事情,但允许你不 'waste' 单词,如果这对你很重要的话。

最后,我还简化了你上面的代码。 Builder 已经导入了 numpy.radom.shuffle 函数,这比做所有的采样等更简单,然后你不需要导入标准 random 库。