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

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

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

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

person lo_rabb    schedule 10.11.2015    source источник
comment
Если вы сомневаетесь в ошибках типа, обильно посыпьте некоторыми операторами отладки, такими как print(type(TrialTarget))   -  person Michael MacAskill    schedule 10.11.2015
comment
(но также удалите их, когда вы хотите запустить - множество операторов печати могут через некоторое время вызвать сбой)   -  person Jon    schedule 11.11.2015


Ответы (1)


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

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().

person Michael MacAskill    schedule 10.11.2015