2016-03-07 129 views
1

我想写一段代码,需要200个文本刺激才能被查看1秒一个接着一个,但我不能让我的代码工作。Python - 在循环中使用预定义变量的列表(psychopy)

每次刺激被预定义为一个变量:

redkey = visual.textStim(win, "key", (1.0, -1.0, -1.0) 
bluekey = visual.textStim(win, "key", (-1.0, -1.0, 1.0) 

我有一个清单200项长,像这样:

x = ['redkey', 'bluekey', 'bluekey', 'redkey'...] 

我想写一个for环路通过列表循环和显示每个变量的第二个(粗略),但我不能让它工作。

win = visual.Window([1024, 768], fullscr = false, allowGUI=false, color = (0.0, 0.0, 0.0)) 

for item in x: 
    item.draw() 
    win.flip() 
    core.wait(1.0) 

当我这样做时,我得到错误:AttributeError: 'str' object has no attribute 'draw'

我试着玩vars()eval()但我不能完全弄清楚如何去做。这甚至有可能吗?

+1

你为什么不只是让你的列表包含实际的对象而不是字符串(即,'[redkey,bluekey,...]'而不是'['redkey','bluekey',...]')? – BrenBarn

+0

谢谢!像魅力一样工作。 – Ron

+1

另外,不要将它创建为200个对象引用的文字列表。使用Python来完成繁重的工作:'x = [redkey,blue key] * 100'。然后'shuffle(x)'将其随机化(在'numpy.random import shuffle'后面)。 –

回答

2

我猜你应该改变:

x = ['redkey', 'bluekey', ...] 

x = [redkey, bluekey, ...] 

正因为如此,在“X”的每一项都是一个字符串,而不是的需要的类对象。

+0

王牌!这工作 – Ron

+0

与实验祝你好运! – Boa

1

更符合PsychoPy让你可以一次创建你的刺激,并改变其颜色为每次抽奖

colours = ['red', 'green', 'blue']*200 
stim = visual.TextStim(win, text="key") 
for entry in colours: 
    stim.color = entry 
    stim.draw() 
    win.flip() 
    core.wait(1.0) 

这比在存储器中存储多个文本刺激更有效