Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Supported by

Trouble with resetting loop.

Hi OS forum,

I'm having trouble with what seems to be a rather straightforward task. I have a trial sequence where participants have to enter a response and if they do not get a correct response, the loop repeats itself until they get all 8 trials in a row correct (so the Loop that contains the sequence just has 8 rows). The structure looks like this:

I've been able to implement the repetition using an inline script (TrainList_CheckCorrect):

if var.correct == 0:

items.execute(u'TrainListLoop)

This gets the loop to repeat just fine based on incorrect responses.

The issue is when the criterion to continue (i.e getting 8 trials in a row correct, so completing all the rows in TrainListLoop) is reached, I keep getting a Python

Traceback Error/TypeError (see below). This doesn't arise if I get all 8 trials correct on the first go.

So I suspect it's something to do with Python not liking the TrainListLoop running more than once, since it's 'Repeat' variable is just set to 1. I had a look at some of the other forum posts on this and try doing something with the outer loop and adding a break-if statement, but that didn't quite work (or at least I'm not sure I was doing it correctly). It's probably something really simple that I'm missing...

Any suggestions?

Thanks very much in advance!


Adam

Comments

  • Hi Adam,

    There is also a repeat_cycle item in OpenSesame. Would that offer an easy solution? In this case, you have to place the `repeat_cycle` item in TrainListSeq below (or after) TrainListLoop. You can then specify in the condition field in repeat_cycle when the current cycle (or sequence) should be repeated, which in your case is whenever less than 8 correct responses are given.

  • Hi Daniel,

    Thanks for the response (sorry for the slow response on my end!). I ended up using a suggestion in a different post to set a higher loop 'TrainList' to repeat a very large number of times, then break under some condition. It turns out I couldn't actually specify the final line of code (items.execute...) in my snippet above; somehow that doesn't quite work with that implementation. So it's working now.

    I might also give your suggestion a go - always good to know if this can be implemented in more than one way!

    Thanks again!

    Adam

Sign In or Register to comment.