Изменение текста и изображения стимулов в соответствии со списками - PullRequest
0 голосов
/ 26 февраля 2020

Я пытаюсь подарить участникам слово животного и изображение животного. Иногда слово и изображение будут совпадать, иногда они не будут совпадать, и участники должны будут ответить на имя животного. Я борюсь с тем, чтобы представить текст и изображения.

Итак ...

У меня есть список животных:

animal_words =[ 'gorilla', 'Ostrich', 'Snake', 'Panda']

У меня есть изображение животного, которые такие же, как цвета выше

animal_image=[ 'gorilla', 'Ostrich', 'Snake', 'Panda']

У меня есть два состояния: одно и то же и разное. Я отсортировал вышеупомянутые списки в одинаковые и разные. Одно и то же условие будет представлено участникам 10 раз, а другое условие будет представлено 5. Я собрал их в пробный список.

same=[]
different[]
conditions=[]

for animal in animals:
for image in animal_images:
    if animal == image:
        same.extend([[animal,image]]* 10)
    else:  
        different.extend ([[animal,image]] * 5)

shuffle (same)
shuffle (different)

#combine conditions into trial list
conditions=[same,different]

Пример того же условия:

[Горилла (текст), Горилла (изображение)]

Затем я создаю свое окно и стимулы:

from psychopy import visual, event, core, gui

win=visual.Window([1024,768], fullscr=False,allowGUI=True, units='pix',\
color= (-1,-1,-1))

tstim=visual.TextStim(win, text='', pos=(0,0), color= ((0,0,0)))
imstim=visual.ImageStim(win, image='', pos=(0,0)

Мне нужно назначить текст животного для tstim и animal_image для imstim и установить al oop так, чтобы они менялись в соответствии со списками, которые я составил. Я не смог успешно сделать это, так как списки склеены. Я также не знаю, как настроить цикл. Следующий код - мое лучшее предположение о том, как должен выглядеть l oop:

for a in conditions:
     tstim.setText(animal_name)
     imstim.setImage(animal_image)
     tstim.draw()
     imstim.draw()
     win.flip()
     core.wait()

Однако я не думаю, что l oop правильно, но я не могу думать ни о чем другом. Любая помощь будет оценена

1 Ответ

0 голосов
/ 26 февраля 2020

Вы на правильном пути. Желательно иметь вложенный список, в котором каждый подсписок содержит пару для пробной версии. Я бы предложил создать вложенный список с изображениями и текстовыми стимулами, а затем выполнить этот список стимулов. Я продемонстрирую это ниже (не проверено).

import random
from psychopy import visual, event, core, gui

animal_words = ['Gorilla', 'Ostrich', 'Snake', 'Panda']
animal_images = ['Gorilla', 'Ostrich', 'Snake', 'Panda']

win = visual.Window(
    [1024, 768], fullscr=False, allowGUI=True, units='pix',
    color=(-1, -1, -1))

# Create list of trials
trials = []
for animal in animal_words:
    for image in animal_images:
        # Get the filepath to the animal image.
        image_file = "{}.png".format(image)
        # Instantiate the stimulus objects.
        stim_pair = [
            visual.TextStim(win, text=animal, pos=(0, 0), color=(0, 0, 0)),
            visual.ImageStim(win, image=image_file, pos=(0, 0))
        ]
        # Add stimulus objects to growing list of trials.
        if animal == image:
            trials.extend([stim_pair] * 10)
        else:
            trials.extend([stim_pair] * 5)

random.shuffle(trials)

# Run trials
for text, image in trials:
    text.draw()
    image.draw()
    win.flip()
    core.wait()

Если все испытания одинаковы (только в другом порядке), то вы можете сохранить путь к файлу текста и изображения в электронной таблице, прочитать электронную таблицу в список, создать объекты стим и перемешать этот список. Это было бы вместо создания списка при каждом запуске.

...