Howdy, Stranger!

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


Somehow this won't work.

kratosaurion7kratosaurion7 Member Posts: 3
I wanted to do this little program that shows a list of names and give them random numbers. The user have to memorize each name-number set and must give the correct number to the name chosen randomly.

def mainGame():
playing = True

#The lists are matching names with their numbers.
nameList = ('Joe', 'Alice', 'Bob', 'Eve')
#numberList = (returnRandom(0, 10), returnRandom(0, 10), returnRandom(0, 10), returnRandom(0, 10)) #Return random is a function I made that spits out a random number given the range. Shortcut for random.randint(min, max)

for i in range(0, len(numberList)):
print nameList[i], ":", numberList[i]

while playing:
rand = returnRandom(0, len(numberList))

print "What is %s's number?" % nameList[rand]

if raw_input("Choice: ") == numberList[rand]:
playing = False

print "Congratulation, you finished this minigame !"
Joe : 2
Alice : 10
Bob : 5
Eve : 4

What is Bob's number?
Choice: 5
(I know I should use a dictionary, but I can't seem to work it out. Any help is appreciated though.)

The problem is that after a few iterations I get this error:
print "What is %s's number?" % nameList[rand]
IndexError: tuple index out of range
It can be after 3 iterations, or 5 or 6. And I don't why, its not supposed to go out of range at all ! Halp.


  • joeabjoeab Member Posts: 6
    This post has been deleted.
  • joeabjoeab Member Posts: 6
    This post has been deleted.
  • bubbatremellbubbatremell Member Posts: 39
    The highest index of a list is len(list) - 1 (b/c it's zero-indexed).
    Say my list looks like this:
    a = [1, 2, 3]
    len(a) == 3
    a[2] == 3
    a[3] == error

    In your code, after a while, it tries to hit an index beyond the range of the tuple. This happens because it's allowed to look up nameList[len(numberList)], but the highest index is len[numberList - 1].

    Hope that helps!
Sign In or Register to comment.