这是我的完整脚本的摘录(缩短以便更容易理解)。
我此刻非常困难。
答案 0 :(得分:1)
我可能会这样做:
import random
# Build the question list
red = ['1'] * 3 + ['2'] + ['3']
green = ['1'] + ['2'] * 3 + ['3']
blue = ['1'] + ['2'] + ['3'] * 3
questions = []
questions.extend([('red', x) for x in red])
questions.extend([('green', x) for x in green])
questions.extend([('blue', x) for x in blue])
random.shuffle(questions)
for color, number in questions:
# do whatever
这允许您非常容易地更改列表,它将自动编译并随机播放它们:
[1]*3+[2]+[3] generates [1, 1, 1, 2, 3]
基本上:我想要3个1,列表中有2个和3个。
questions.extend
使用您传递的任何列表扩展问题列表,因此我想将它们全部放在一起。
[('red', x) for x in red]
是list comprehension,其中说:制作一个新列表,但对于之前列表中的每个数字,请说出来(' red',x )其中x是旧列表的内容。
最后,random.shuffle()
对列表进行洗牌,因此订单是随机的。
注意:此方法(['1'] * 3 + ['2'] + ['3']
)列表生成对mutable objects不安全,但由于字符串是不可变的,我们很好。
答案 1 :(得分:0)
我建议采用不同的方法:使用所有特征存储所需的对象:显示字符和颜色。这给你一些类似的东西:
In [283]: x
Out[283]:
array([[[2, 3, 7],
[8, 1, 0],
[3, 6, 9]],
[[8, 0, 5],
[2, 2, 9],
[9, 0, 9]],
[[1, 9, 2],
[5, 0, 3],
[7, 2, 1]],
[[1, 6, 5],
[2, 3, 7],
[7, 4, 6]]])
In [284]: x.reshape(x.shape[0],-1).argmax(1)
Out[284]: array([8, 5, 1, 5])
现在,您使用
拉出一个随机显示对象display_candidates = [
('1', 'r'), ('1', 'r'), ('1', 'r'),
('1', 'g'), ('1', 'b'),
('2', 'g'), ('2', 'g'), ('2', 'g'),
('2', 'b'), ('2', 'r'),
('3', 'b'), ('3', 'b'), ('3', 'b'),
('3', 'r'), ('3', 'g')
]
现在,对于setColor使用颜色,就像你上面所做的那样。
你需要绕一个循环来使它运行所需的次数。
这会让你感动吗?
答案 2 :(得分:0)
您应该有一个数据结构,将字符串与颜色配对,然后放入所需的组合。如下所示:
import random
trials = [{'text': '1', 'color': 'red'},
{'text': '1', 'color': 'red'},
{'text': '1', 'color': 'red'},
{'text': '1', 'color': 'green'},
{'text': '1', 'color': 'blue'},
{'text': '2', 'color': 'green'}] # ... etc
random.shuffle(trials)
key_mapping = {'r': 'red', 'g':'green', 'b':'blue'} # which keys means which color
for trial in trials:
stimu.color = trial['color']
stimu.text = trial['text']
stimu.draw()
ewindow.flip()
response = event.waitKeys(keyList=key_mapping.keys())[0] # get first response, only allow keys which have been mapped
trial['correct'] = key_mapping[response] == trial['color'] # True if correct, False if incorrect
另请注意我如何简化设置刺激属性和评分响应的代码 - 部分通过更好的数据结构实现。虽然这里的词典列表似乎有些过分,但您很可能希望在稍后阶段添加更多信息(试用版号,主题ID,反应时间等),然后它变得有用。