Repeating a script in Python

8.3k views Asked by At

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?

2

There are 2 answers

2
user3684792 On BEST ANSWER

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()
2
Hasan Ramezani On

you can use:

1-run script 3 time from shell if you are using linux you can run:

for i in {1..3}; do python script.py; done

2-put your code in a function and run it 3 times:

def test_func():
    # put your code here

for i in range(3):
    test_func()

3- put your code under loop

for i in range(3):
    # put your code here