在構建器中添加一個非常簡單的代碼組件將爲您做到這一點。我對這些條件有點困惑,但你可能會得到一般想法。假設您在條件文件中有72個「固定」條件,並且具有針對這些條件中的每一個運行的例程的循環。
我假設你的刺激程序中有一個TextStim。假設你稱之爲'letternumber'。然後,一般策略是預先計算72個試驗中隨機化字符和位置的列表,然後在我們穿過實驗時只顯示它們。要做到這一點,添加代碼組件添加到您的刺激程序的頂部,並添加在「開始實驗」:
import random # we'll use this module to pick random elements from below
# Indicator sequence, specifying whether letter/number should be shown. False= do not show. True = do show.
show_letternumber = [False] * 18 + [True] * 54 # 18/72=25%, 54/72=75%.
random.shuffle(show_letternumber)
# Sets of letters and numbers to present
char_set = ['1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g'] # ... and so on.
char_trial = [random.choice(char_set) if show_char else '' for show_char in char_set] # list with characters
# List of positions
pos_set = [(0.5, 0.5),(-0.5, 0.5),(-0.5,-0.5),(0.5, -0.5)] # coordinates of your four corners
pos_trial = [random.choice(pos_set) for char in char_trial]
然後在代碼組件「開頭常規」下,設置lettersnumbers
顯示的character_trial
值對於該試驗和在pos_trial
中的位置。
letternumbers.pos = pos_trial[trials.thisN] # set position. trials.thisN is the current trial number
letternumbers.text = char_trial[trials.thisN] # set text
# Save to data/log
trials.addData('pos', pos_trial[trials.thisN])
trials.addData('char', char_trial[trials.thisN])
您可能需要勾選「設置每個重複」在Builder中lettersnumbers
組件的實際顯示文本。
因爲我真的很陌生,我花了一段時間才發現,在「每個試驗」(whis在我的版本中稱爲「每個框架」)代碼組成部分中,「試驗」代表循環。但現在它似乎工作。謝謝! – Sarah
啊,對不起,這是「開始例行公事」。並在「開始例程」中插入第二個代碼片段。你只需要按照慣例做一次,這樣可以節省一些性能,但更重要的是,更有意義。相應地更新了答案。 –
不幸的是,經過幾次試驗後,我收到錯誤反饋,程序停止。錯誤反饋是: ... letternumbers.pos = pos_trial [trials.thisN] IndexError:列表索引超出範圍 – Sarah