Python - empty range for randrange() (0,0, 0) and ValueError("empty range for randrange() (%d,%d, %d)" % (istart, istop, width))
The error occurs when the people list is empty (length 0). You may want to test for that:
>>> import random
>>> random.randrange(0, 0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/mj/Development/Libraries/buildout.python/parts/opt/lib/python2.7/random.py", line 217, in randrange
raise ValueError, "empty range for randrange() (%d,%d, %d)" % (istart, istop, width)
ValueError: empty range for randrange() (0,0, 0)
If you need to add 6 random choices from the people list it is better to shuffle the people list and then add the first 6 of that list to group:
import random
people = 'Alice Elise Jack Jill Ricardo David Jane Sacha Thomas'.split()
random.shuffle(people)
group.extend(people[:6])
people = people[6:] # remainder, so the 6 picks have been removed
but chances are of course you end up with an empty list again at some point.
Another approach is to just use random.sample():
people = 'Alice Elise Jack Jill Ricardo David Jane Sacha Thomas'.split()
group.extend(random.sample(people, 6))
This just picks 6 random names from the list, but leaves people unaffected and a future pick of 6 names could repeat names.
Lucas
Updated on July 09, 2022Comments
-
Lucas 6 monthsWhen I run this program: (python 3.3.1)
import random import time from random import randrange print(' ') print('I am thinking of a person...') time.sleep(1) print('He or she belongs to this group of people:') people = 'Alice Elise Jack Jill Ricardo David Jane Sacha Thomas'.split() loop = 0 while loop != 6: group = [] person = randrange(0, len(people)) personName = people[person] int(person) group.append(personName) del people[person] loop = loop + 1I sometimes get this error message:
Traceback (most recent call last): File "C:\Users\user\Python\wsda.py", line 132, in <module> person = randrange(0, len(people)) File "C:\Python33\lib\random.py", line 192, in randrange raise ValueError("empty range for randrange() (%d,%d, %d)" % (istart, istop, width)) ValueError: empty range for randrange() (0,0, 0)Basically i want it to get 6 random names from the variable 'people' and add it to the variable 'group'...
Also this is part of a larger program based on the guess who game... Could someone please tell me how to fix this? Thx
-
Lucas over 9 yearsThx that worked! BTW what does people[:6] do? Does it take the first 6? The division sign is a bit wierd, hence my confusion. -
Martijn Pieters over 9 yearsSee The Python Slice Notation, it takes the first 6 (indices 0 through to 5).