Отформатированная строка из списка Psychopy

Моя задача - это вариант задачи отслеживания нескольких объектов. На экране 7 кругов. Он случайным образом выбирает 3 круга, чтобы ненадолго изменить цвет (красный, зеленый, синий), чтобы указать участнику отслеживать эти круги. После изменения цвета все круги изменятся на один и тот же цвет, и круги будут двигаться в течение определенного периода времени. Когда круги перестают двигаться, появится ответная подсказка, в которой участник должен выбрать один из трех цветных кругов ("выберите красный / зеленый / синий круг"). У меня возникают трудности при вставке выбранного цветового круга в форматированную строку. Я получаю сообщение об ошибке: неподдерживаемые типы операндов для%: 'TextStim' и 'list'

Я не уверен, если мне нужно или как преобразовать эти списки, поэтому любая помощь будет высоко ценится!

n_targets = 7 #seven locations     
circles = [] #setting up the circle stimuli
for i in range(n_targets):
    tmp = visual.Circle(win,radius = 27,units = 'pix',edges = 32,fillColor='white',lineColor = 'black',lineWidth = 1, pos=(posx[i],posy[i]))
circles.append(tmp)
cols = ['blue','red','green'] #3 colors the circles will change to 
targets = random.sample(circles,3) #randomly select 3 of the 7 circles
TrialTarget = random.sample(targets, 1) #select 1 of the 3 circles to be the target for the trial 
#code for movement would go here (skipping since it is not relevant)
#at end of trial, response prompt appears and ask user to select target and is where error occurs
ResponsePrompt = visual.TextStim(win, text = "Select the %s circle") %TrialTarget

1 ответ

Решение

В этой строке вы пытаетесь создать отформатированную строку из объекта TextStim и объекта-стимула "Круг", а не объекта строки и другого объекта строки:

ResponsePrompt = visual.TextStim(win, text = "Select the %s circle") %TrialTarget

т.е. ResponsePrompt явно визуальный.TextStim, так как вы создаете его как единое целое, и я думаю, TrialTarget является визуальным. Круговой стимул, как вы случайным образом выбираете его из списка кругов.

Я предполагаю, что вы действительно хотите включить цветную метку в текст подсказки. Таким образом, чтобы устранить обе проблемы (несовместимость типов и синтаксис форматирования), вам необходимо получить один из элементов: colsпозвонил сказать trialColourи используйте что-то вроде этого:

ResponsePrompt = visual.TextStim(win, text = "Select the %s circle" % trialColour)

т.е. здесь trialColour на самом деле является строкой, и операция форматирования переносится в скобках, поэтому она применяется непосредственно к текстовой строке "Select the %s circle"

Надеюсь, это должно исправить вашу непосредственную проблему. Вы могли бы также хотеть исследовать, используя random.shuffle() перетасовать списки вместо random.sample(),

Другие вопросы по тегам