By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
459,200 Members | 1,761 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 459,200 IT Pros & Developers. It's quick & easy.

list index out of range

P: n/a
I am a relatively new python user. I am writing an economic simulation of acard-game. The simulation runs fine for a few iteration but then it gives an error of "list index out of range."

The strange thing is that it will sometimes run for 10 iterations sometimesfor only a few and sometimes won't run at all (seemingly arbitrary).
Here is some of the code:

for _ in range(100):
handA=deal_hand(DECK) #deals 2 'hole' cards from a DECK
handB=deal_hand(DECK)
print handA
print handB
deal_flop(handA,handB,DECK) #appends 3 cards to handA and handB
deal_current(handA,handB,DECK) #appends one more card
deal_rake(handA,handB,DECK) #appends one more card
DECK.extend(list(set(handA+handB))) #returns the cards to the DECK
print winner(handA,handB) #returns 0-draw 1 -playerA win, 2-playerB win

The error message is :

['08C', '10H']
['07S', '03C']
--------
['06C', '02H']
['04D', '12S']
--------
['11H', '14S']
['06S', '04S']
--------

Traceback (most recent call last):
File "G:\Other Stuff\POKER4.py", line 267, in <module>
handB=deal_hand(DECK)
File "G:\Other Stuff\POKER4.py", line 13, in deal_hand
HAND.append(deck[i])
IndexError: list index out of range

In this case it ran 3 times. It will sometimes run for up to 9-10 times. Itseems to be arbitrary but I can't get it to run more than 12 times.

Here is the code for the --deal_***-- functions:

def deal_hand(deck):
HAND=[]
for _ in range(2):
i=random.randint(0,len(deck)) #produces a random card from the deck
HAND.append(deck[i]) # appends the card to the players' hand list
deck.remove(deck[i]) #removes the card from the deck
return HAND

def deal_flop(hand1,hand2,deck):
for _ in range(3):
i=random.randint(0,len(deck))

hand1.append(deck[i])
hand2.append(deck[i])
deck.remove(deck[i])

I would appreciate any help with this
Thanks
George
Send instant messages to your online friends http://uk.messenger.yahoo.com
Jun 27 '08 #1
Share this Question
Share on Google+
2 Replies


P: n/a
random.randint(x,y) returns a random integer between _and including_ x and
y, so randint(0, len(deck)) might return len(deck) and since python's
indices start at 0, the maximum index is len(deck)-1.

rather than using randint(0,len(deck)-1) you could just do
card = random.choice(deck)
HAND.append(card)
deck.remove(card)

although it would be more efficient to do remove card by index which then
gets us back to using randint, like this

i = random.randint(0, len(deck)-1)
HAND.append(deck[i])
del deck[i]

but i guess speed probably isn't a big factor here

also you could have done
i=random.randint(0, len(deck)-1)
HAND.append(deck.pop(i))


"Georgy Panterov" <gp*******@yahoo.comwrote in message
news:ma***************************************@pyt hon.org...
I am a relatively new python user. I am writing an economic simulation of a
card-game. The simulation runs fine for a few iteration but then it gives an
error of "list index out of range."

The strange thing is that it will sometimes run for 10 iterations sometimes
for only a few and sometimes won't run at all (seemingly arbitrary).
Here is some of the code:

for _ in range(100):
handA=deal_hand(DECK) #deals 2 'hole' cards from a DECK
handB=deal_hand(DECK)
print handA
print handB
deal_flop(handA,handB,DECK) #appends 3 cards to handA and handB
deal_current(handA,handB,DECK) #appends one more card
deal_rake(handA,handB,DECK) #appends one more card
DECK.extend(list(set(handA+handB))) #returns the cards to the DECK
print winner(handA,handB) #returns 0-draw 1 -playerA win, 2-playerB win

The error message is :

['08C', '10H']
['07S', '03C']
--------
['06C', '02H']
['04D', '12S']
--------
['11H', '14S']
['06S', '04S']
--------

Traceback (most recent call last):
File "G:\Other Stuff\POKER4.py", line 267, in <module>
handB=deal_hand(DECK)
File "G:\Other Stuff\POKER4.py", line 13, in deal_hand
HAND.append(deck[i])
IndexError: list index out of range

In this case it ran 3 times. It will sometimes run for up to 9-10 times. It
seems to be arbitrary but I can't get it to run more than 12 times.

Here is the code for the --deal_***-- functions:

def deal_hand(deck):
HAND=[]
for _ in range(2):
i=random.randint(0,len(deck)) #produces a random card from the deck
HAND.append(deck[i]) # appends the card to the players' hand list
deck.remove(deck[i]) #removes the card from the deck
return HAND

def deal_flop(hand1,hand2,deck):
for _ in range(3):
i=random.randint(0,len(deck))

hand1.append(deck[i])
hand2.append(deck[i])
deck.remove(deck[i])

I would appreciate any help with this
Thanks
George
Send instant messages to your online friends http://uk.messenger.yahoo.com
Jun 27 '08 #2

P: n/a
On May 13, 2:39 pm, Georgy Panterov <gpante...@yahoo.comwrote:
>
def deal_hand(deck):
HAND=[]
for _ in range(2):
i=random.randint(0,len(deck)) #produces a random card from the deck
^ Here i can be from 0 thru (the number of cards in the
deck).
HAND.append(deck[i]) # appends the card to the players' hand list
^ Here you index into the deck to get a
card. The legal indexes are 0 thru (number of cards in the deck - 1)
What happens if i is (the number of cards
in the deck)?
deck.remove(deck[i]) #removes the card from the deck
return HAND
Jun 27 '08 #3

This discussion thread is closed

Replies have been disabled for this discussion.