2015-09-30 42 views
0

我正在做一个实验,并且使用一些编码器和一些构建器构建了它的一部分,但我被困在一个位置上。实验给人们提供了两种不同的单词列表(列表A和列表B),并且它的各个列表中的每个单词在实验开始时随机与一个数字配对。 Psychopy向参与者显示单词和数字,重要的是,在他们随机配对之后,字 - 数对将在实验的其余部分被绑定。我已经使用编码器来随机配对,并在飞行中为两个单词列表构建一个条件文件。生成器然后使用这些构建的条件文件来呈现刺激(词和数字)。组合条件文件

这是我卡住的部分。在呈现两个单词列表和他们的配对数字后,我需要列出A和B列表的一个子集,以及先前未提供的第三个单词 - 数字对列表。因此,举例来说,一个人可能会看到在实验过程是这样的:

首先介绍: 列表A: 坦率 - 1,苏珊 - 3

B组: 鞋 - 2,灰溜溜 - 1

第二个介绍: 坦率 - 1,鞋 - 2,酒店 - 4

实验的开始就是编码器是用于创建Word和表数以及写两个列表的条件文件。这代码如下:

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]]) 

我需要两个先前提出的名单中随机子集与尚未提交给由参与者一起见识了一个额外的名单。已经看到的列表的前面的字数配对也需要保留。我似乎无法发现如何做到这一点。

我目前有两个单词列表,每个单独的例程中都有循环。我想弄清楚如何创建第三个例程,它只显示一些先前看到的字数对和一些新的字数对。 谢谢。

+0

通过“使用某些编码器和某些构建器”,您是否确实意味着您完全在构建器中工作,但插入了代码组件? (这样会影响默认情况下由Builder导入的库。) –

+0

您是否可以编辑以实际提出问题?目前尚不清楚实际问题是什么。呈现响应的子集是构建器循环对话框中的一个直接选项。使用第三个列表的确切难度是什么? –

+0

是的,我正在使用上面唯一的代码完全使用生成器。 – Anchises

回答

0

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

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

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

+0

谢谢。我如何随机化第二个演示文稿?我在$ texthere的构建器中使用了文本刺激来从条件文件中调用该列。第二个文本刺激用于调用数字的点值。我该如何做到这一点,使$ texthere和$ numberhere随机显示列表A,B或填充项中的某些内容?编码器组件是否需要设置文本刺激?我还需要确保这种随机化不是用替换。例如,我需要列表A的一半,列表B的一半,填充列表的一半。如果有偶尔的AA或BB顺序序列没问题。 – Anchises

+0

为了弄清楚,列表A,B和填充点与点一起现在都在同一个条件文件中,我需要调用一个随机的A,B或填充符,并在文本刺激中设置随机调用的条件。 – Anchises

+0

您现在已经超越了随机化方案Builder可以实现的“开箱即用”。例如它的设计不是没有替换就做抽样。通过将循环指定为“完全随机”并使用nReps> 1,然后仅显示一个子集,可能会被黑客攻击。但仅仅显示A和B列表的一半,这是行不通的。你需要用你想要的条目构建一个条件文件。但是您可能会发现转向编码器以获得充分的灵活性更容易。 –