Python-在循环中使用预定义变量列表(psychopy)

Python-在循环中使用预定义变量列表(psychopy),python,loops,psychopy,predefined-variables,Python,Loops,Psychopy,Predefined Variables,我正试图写一段代码,需要200个文本刺激一个接一个地观看1秒,但我无法让我的代码工作 每个刺激都预定义为一个变量: 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'...] 我试图为编写一个循

我正试图写一段代码,需要200个文本刺激一个接一个地观看1秒,但我无法让我的代码工作

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

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'...]
我试图为编写一个
循环,循环列表并显示每个变量一秒钟(大致),但我无法让它工作

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'对象没有属性'draw'


我试着玩
vars()
eval()
但是我不太明白怎么做。甚至有可能做到这一点吗?

我猜你应该改变:

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


实际上,“x”中的每个项目都是一个字符串,而不是所需的类对象。

为了更符合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)

这比在内存中存储许多文本刺激更有效

为什么不让列表中包含实际对象而不是字符串(例如,
[redkey,bluekey,…]
而不是
['redkey',bluekey',…]
)?谢谢!工作起来就像一个符咒。另外,不要创建一个包含200个对象引用的文本列表。使用Python完成繁重的工作:
x=[redkey,blue key]*100
。然后
shuffle(x)
将其随机化(在numpy.random import shuffle
之后)。祝实验顺利!
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)