[kirby urner] ... > Here's the remedied function: > def askq(quiz = quiz1): > score = 0 > possible = len(quiz) > thequiz = quiz[:] # from hence forth, use thequiz, leave quiz alone > > while len(quiz) > 0: > pickone = randint(0, len(quiz)-1) > ... > thequiz.pop(pickone)
You're working too hard ;-) > Now of course it's problematic to be popping off a list just because > you wanna not hit the same question twice, and are picking > questions randomly. Sure, this is one way to prevent duplicates. > Even the while loop is pegged to the list length. Didn't have to > be this way. > Just as good if not way better, is to shuffle the indexes ahead > of time e.g. indexes = range(len(thelist)); indexes.shuffle(). > That'll give you a random sequence on a "primary key" with no > need to mess with popping data off a list copy. Still working too hard ;-) Why not shuffle the quiz guts directly? def askq(quiz = quiz1): thequiz = quiz[:] # from hence forth, use thequiz, leave quiz alone shuffle(thequiz) for q, a in thequiz: # marches over the questions in a random order # `q` is the question, `a` is the answer In fact, if you don't mind permuting the quiz each time, there's no need to make a copy of the quiz then either (because nothing is ever removed from it): def askq(quiz = quiz1): shuffle(quiz) for q, a in quiz: # marches over the questions in a random order # `q` is the question, `a` is the answer _______________________________________________ Edu-sig mailing list Edu-sig@python.org http://mail.python.org/mailman/listinfo/edu-sig