On Thu, 12 Aug 2010 07:04:15 am Laurens Vets wrote: > I need to generate a list of 30 numbers randomly chosen from 1, 2, 3, > 4, 5 & 6. However, I cannot have more than 2 numbers which are the > same next to each other. I came up with the following (Please ignore > the fact that I'm trying to avoid an IndexError in a stupid way :)):
I can't possible do that! :) > import random > reeks = [] > while len(reeks) <= 1: > number = random.randrange(1, 7, 1) > reeks.append(number) > > while len(reeks) <= 29: > nummer = random.randrange(1, 7, 1) > if nummer != reeks[-1] and nummer != reeks[-2]: > reeks.append(nummer) > print reeks This is probably a simpler way: import random reeks = [] for i in range(30): temp = [random.randint(1, 6)] while reeks[-2:-1] == reeks[-1:] == temp: # print "Triplet found:", reeks, temp temp = [random.randint(1, 6)] reeks.extend(temp) print reeks Note that you can avoid dealing with IndexError by extracting slices and comparing lists. > However, I wanted to look deeper in the above script and I created > the following: [...] > if nummer != reeks[-1] and nummer != reeks[-2]: > reeks.append(nummer) > else: > print 'Nummer: ', nummer, 'is gelijk aan vorige 2 nummers: ', > reeks[-1], '&', reeks[-2], '!' > print '\n' > print reeks > > When I run that, I can see there's something wrong with my if > statement, it triggers the else condition even when the 2 previous > numbers in my list are not the same... I'm not sure what is > happening here... nummer != reeks[-1] and nummer != reeks[-2] gives a true result if all three numbers are different, otherwise it gives a false result. Negative conditions are often hard to reason with. It might be better to write that as: nummer == reeks[-1] and nummer == reeks[-2] and swap the if/else clauses. But even better is to use Python's chained comparisons, and write: nummer == reeks[-1] == reeks[-2] -- Steven D'Aprano _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor