在下面的代码中,我从列表(目标集)中绘制3个图像,然后将它们显示在屏幕上。接下来,我将另外3个图像(图片)显示在屏幕的不同部分。对于第二部分;在50%的情况下,我希望“图片”图像与最初显示的图像(目标集)相同。我对这部分没问题,我在x == 0时设置pics = targetset(基本上是翻转硬币)。
我的问题是,在另外50%的情况下,我希望其中一个'pics'设置为与其中一个orignally show set(targetset)相同,三者中的任何一个。我希望从图片列表中随机选择剩下的2个。按照我的逻辑,按照我的逻辑,我只能将“图片”图像与“目标集”中最初显示的图像完全相同或全部不同。
添加问题:当x == 0(制作pics = targetset)时,它们都显示正常,但是当x == 1(意味着不做更改)时,我收到以下错误消息:
pics [i] .pos = location [i] UnboundLocalError:在赋值之前引用的局部变量'pics'
这是我的代码:
#create initial target set
imgList1 = glob.glob(os.path.join('stim','*.png'))
random.shuffle(imgList1)
targetset = [visual.ImageStim(window, img) for img in imgList1[:3]]
#initial target set location
setlocation = [(-2,0),(0,0),(2,0)]
random.shuffle(setlocation)
#create target list
imgList = glob.glob(os.path.join('stim', '*.png'))
random.shuffle(imgList)
pics = [visual.ImageStim(window, img) for img in imgList[:3]]
#set target locations
location = [(1,2),(3,3),(5,5)]
random.shuffle(location)
'''define sequential presentation function'''
def seq():
x = random.randint(0,1)
if x == 0:
pics = targetset
print x
#display initial target set
for i in range(3):
targetset[i].pos = setlocation[i]
targetset[i].draw()
window.flip()
core.wait(3)
#display targets
for i in range(3):
pics[i].pos = location[i]
pics[i].draw()
window.flip()
core.wait(1)
seq()
core.wait(3)
window.close()
quit()
我希望有人可以提供帮助, 干杯 小号
答案 0 :(得分:1)
我看到你的代码可能存在一些陷阱。一个是您从同一组图像中创建两个单独的列表imgList1
和imgList
,然后您将每个列表分别随机化,并将每个列表中的前三个元素拉入{{1}分别和targetset
。这些子集可能在图像中具有一些重叠。从你对任务的描述来看,我并不认为这是故意的。我可能建议只创建1 pics
,然后使用imgList
函数从列表中提取图像。 Pop返回列表中的最后一个元素,然后从列表中删除该元素。我认为这就像从牌组中取出一张牌,你不能再画一张牌,因为它不再在牌组中了。你现在正在做的就像从两个不同的套牌中抽取卡片。你可能会两次获得同一张卡。
我在这里看到的第二个问题是你定义了当你的硬币翻转x为0时要做什么的条件,但是当你的硬币翻转为1时你没有定义一个条件。目前,它只会显示来自imgList.pop()
的前3张图片,因为这是您定义imgList
的方式。我可能会建议在x / coin块的if / else块中定义pics
。如果它为0,则使用pics
,如果它是1,则随机从目标列表中选择一个元素,然后将该元素复制到targetset
并弹出另外两个图像pics
。与所有编码一样,解决此问题的方法不止一种,但我会在这里提供解决方案。
imgList