Somehow this won't work. - Programmers Heaven

#### 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.

Posts: 3Member
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.

[code]
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 !"
[/code]
Output:
[code]
Joe : 2
Alice : 10
Bob : 5
Eve : 4

What is Bob's number?
Choice: 5
[/code]
(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:
[code]
print "What is %s's number?" % nameList[rand]
IndexError: tuple index out of range
[/code]
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.

• Posts: 6Member
This post has been deleted.
• Posts: 6Member
This post has been deleted.
• Posts: 39Member
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]
Then,
len(a) == 3
However,
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!