数字串颜色和试验。需要更好的解决方

时间:2017-02-01 21:54:44

标签: python

这是我的完整脚本的摘录(缩短以便更容易理解)。

我此刻非常困难。

3 个答案:

答案 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,反应时间等),然后它变得有用。