Python:刺激随机变化

Python:刺激随机变化,python,Python,我正在尝试做一个任务,在这个任务中,固定十字架将在60秒左右的随机时间(以秒为单位)改变颜色(从白色变为红色)。所以,在5秒、10秒、45秒或55秒时。我尝试了if-else循环,但得到了一个错误:fixection.draw() NameError:没有为脚本中的最后一个fixture.draw()定义名称“fixture”,我不知道为什么。我试图在循环之前定义固定,但它不起作用,我也认为我在if-else循环中定义了固定,但可能我错了。代码如下: from psychopy import v

我正在尝试做一个任务,在这个任务中,固定十字架将在60秒左右的随机时间(以秒为单位)改变颜色(从白色变为红色)。所以,在5秒、10秒、45秒或55秒时。我尝试了if-else循环,但得到了一个错误:fixection.draw() NameError:没有为脚本中的最后一个fixture.draw()定义名称“fixture”,我不知道为什么。我试图在循环之前定义固定,但它不起作用,我也认为我在if-else循环中定义了固定,但可能我错了。代码如下:

from psychopy import visual, event, core, data, gui
from psychopy.hardware.emulator import launchScan
import time
from numpy.random import random, randint, normal, shuffle

globalClock = core.Clock()


class MyStim(object):
    def __init__(fixation):
        fixation()

        fixationtimes = list(range(60))
        win = visual.Window([1280, 800], monitor="testMonitor",fullscr=True)

        if fixationtimes == [5, 10, 45, 55]: # create list
            shuffle(fixationtimes) # randomize order
            fixation = visual.GratingStim(win=win, units="deg", size=2, pos=[0, 0], sf=0, color="red", autoDraw=True)
        else:
            fixation = visual.GratingStim(win=win, units="deg", size=2, pos=[0, 0], sf=0, color="white", autoDraw=True)

    fixation.draw()
    win.flip()
    core.wait(2.0)

myStim = MyStim()

win.flip()

core.quit()

代码可能效率很低,因为我是Python新手。如果有人能帮忙,请:)

发生错误是因为init()函数实际上不会立即发生。 这段代码是一个简单的演示

class Foo(object):
    def __init__(self):
        print("hi from init!")

    print("hi!")

myClass = Foo()
这个输出

hi! hi from init!
>>>
因此,init()函数只有在类中的每一行都被执行之后才被调用


此外,在定义类时,通常不建议在方法之外编写代码。如果希望类执行某些操作,请创建一个函数:)

我想我可以在没有类函数的情况下执行该操作。因此,我提出了以下建议:

globalClock = core.Clock()
win = visual.Window([1280, 800], monitor="testMonitor",fullscr=True)
fixationtimes = list(range(60))

for i in fixationtimes:
    if  (i == 5 or i == 10 or i == 45 or i == 55): # create list
        fixation = visual.GratingStim(win=win, units="deg", size=2, pos=[0, 0], sf=0, color="red", autoDraw=True)
        fixation.draw()
        win.flip()
        core.wait(1.0)
    else:
        fixation = visual.GratingStim(win=win, units="deg", size=2, pos=[0, 0], sf=0, color="white", autoDraw=True)
        fixation.draw()
        win.flip()
        core.wait(1.0)

win.close()
core.quit()

如果您有后续问题,应该在单独的帖子中发布。