2016-03-07 133 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) 

這比在存儲器中存儲多個文本刺激更有效