Search code examples
pythonrepeatpsychopy

Repeating a script in Python


I'm brand new to Python (psychoPy) and I have this script that I want it to repeat three times:

 i = 0
    while i < 4:

    import random
    win.setMouseVisible(False)

    this_target = random.choice(first)

    if this_target == 1:
        k = 0
        location = []
        tloc = random.randint(0, 7)
        tloc = str(tloc)
        location.append(tloc)
        gap.setPos(left_gap[tloc, : ])
        squarer.setPos(ranpos[tloc, : ])
        squarer.draw()
        gap.draw()
        while k < 4:
            loc = random.randint(0, 7)
            loc = str(loc)
            if loc not in location: location.append(loc)
            else:
                continue
            squareg.setPos(ranpos[loc, : ])
            squareg.draw()
            dist_side = random.randint(1, 2)
            if dist_side == 1:
                gap.setPos(left_gap[loc, : ])
                gap.draw()
            elif dist_side==2:
                gap.setPos(right_gap[loc, : ])
                gap.draw()

            k+=1


    elif this_target == 2:
        k = 0
        location = []
        tloc = random.randint(0, 7)
        tloc = str(tloc)
        location.append(tloc)
        gap.setPos(right_gap[tloc, : ])
        squareg.setPos(ranpos[tloc, : ])
        squareg.draw()
        gap.draw()
        while k < 4:
            loc = random.randint(0, 7)
            loc = str(loc)
            if loc not in location: location.append(loc)
            else:
                continue
            squarer.setPos(ranpos[loc, : ])
            squarer.draw()
            dist_side = random.randint(1, 2)
            if dist_side == 1:
                gap.setPos(left_gap[loc, : ])
                gap.draw()
            elif dist_side==2:
                gap.setPos(right_gap[loc, : ])
                gap.draw()

            k+=1

    win.flip()
    resp = event.waitKeys(keyList = ['z', 'm', 'q'])
    fix.draw()
    win.flip()
    core.wait(2) #accio

    this_target = random.choice(first)

    if this_target == 1:
        k = 0
        location = []
        tloc = random.randint(0, 7)
        tloc = str(tloc)
        location.append(tloc)
        gap.setPos(left_gap[tloc, : ])
        squarer.setPos(ranpos[tloc, : ])
        squarer.draw()
        gap.draw()
        while k < 4:
            loc = random.randint(0, 7)
            loc = str(loc)
            if loc not in location: location.append(loc)
            else:
                continue
            squareg.setPos(ranpos[loc, : ])
            squareg.draw()
            dist_side = random.randint(1, 2)
            if dist_side == 1:
                gap.setPos(left_gap[loc, : ])
                gap.draw()
            elif dist_side==2:
                gap.setPos(right_gap[loc, : ])
                gap.draw()

            k+=1


    elif this_target == 2:
        k = 0
        location = []
        tloc = random.randint(0, 7)
        tloc = str(tloc)
        location.append(tloc)
        gap.setPos(right_gap[tloc, : ])
        squareg.setPos(ranpos[tloc, : ])
        squareg.draw()
        gap.draw()
        while k < 4:
            loc = random.randint(0, 7)
            loc = str(loc)
            if loc not in location: location.append(loc)
            else:
                continue
            squarer.setPos(ranpos[loc, : ])
            squarer.draw()
            dist_side = random.randint(1, 2)
            if dist_side == 1:
                gap.setPos(left_gap[loc, : ])
                gap.draw()
            elif dist_side==2:
                gap.setPos(right_gap[loc, : ])
                gap.draw()

            k+=1

    win.flip()
    resp = event.waitKeys(keyList = ['z', 'm', 'q'])
    i+=1
    next_trial.draw()
    win.flip()
    event.waitKeys(keyList = ['space'])

    if resp == ['q']:
        core.quit()
        win.close()

begin.draw()
win.flip()
event.waitKeys(keyList = ['space'])

Is there a script I can just add to the beginning to because it to repeat?


Solution

  • why can't you enclose it all in a for loop? - probably want to change the position of the import though...

    import random
    
    def cool_function_bro():
     i = 0
     while i < 4:
    
    
     win.setMouseVisible(False)
    
     this_target = random.choice(first)
    
     if this_target == 1:
         k = 0
         location = []
         tloc = random.randint(0, 7)
         tloc = str(tloc)
         location.append(tloc)
         gap.setPos(left_gap[tloc, : ])
         squarer.setPos(ranpos[tloc, : ])
         squarer.draw()
         gap.draw()
         while k < 4:
            loc = random.randint(0, 7)
            loc = str(loc)
            if loc not in location: location.append(loc)
            else:
                continue
            squareg.setPos(ranpos[loc, : ])
            squareg.draw()
            dist_side = random.randint(1, 2)
            if dist_side == 1:
                gap.setPos(left_gap[loc, : ])
                gap.draw()
            elif dist_side==2:
                gap.setPos(right_gap[loc, : ])
                gap.draw()
    
    for i in range(3):
      cool_function_bro()