组合条件文件

时间:2015-09-30 16:57:40

标签: psychopy

我正在进行一项实验,并使用一些编码器和一些构建器构建它的一部分,但我被困在一个地方。该实验向人们呈现两个不同的单词列表(列表A和列表B),并且其中的每个单词的相应列表在实验开始时随机地与数字配对。心理学向参与者显示单词和数字,重要的是在它们随机配对之后,然后在实验的剩余部分中对词数对进行y轭。我使用编码器随机化配对并动态构建两个单词列表的条件文件。然后,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]])

我需要两个先前呈现的列表的随机子集以及参与者未一起看到的其他列表。还需要保留已经看到的列表的先前字数对。我似乎无法发现如何做到这一点。

我目前在两个单独的例程中显示了两个字数列表,每个列表周围都有循环。我试图弄清楚如何创建第三个例程,它将只显示一些以前看到的字数对以及一些新的字数对。 感谢。

1 个答案:

答案 0 :(得分:0)

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

然后是如何处理第三组字/数字对的问题。最简单的方法是在A& A的同时创建它们。 B将它们设置并粘贴在同一个CSV文件中。但在这种情况下,您需要相同数量的单词和数字,其中一些单词和数字由于仅在最终循环中运行子集而无法显示。另一种方法是在第三个循环之前有第二个代码组件,它读入现有文件,对行进行洗牌,对其进行子集,然后添加新列。即做很多生成器循环本来会为你做的事情,但是如果这对你很重要,你就不要“浪费”。

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