Python - empty range for randrange() (0,0, 0) and ValueError("empty range for randrange() (%d,%d, %d)" % (istart, istop, width))

23,730

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.

Share:
23,730
Lucas
Author by

Lucas

Updated on July 09, 2022

Comments

  • Lucas
    Lucas 6 months

    When 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 + 1
    

    I 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
    Lucas over 9 years
    Thx 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
    Martijn Pieters over 9 years
    See The Python Slice Notation, it takes the first 6 (indices 0 through to 5).