我正在编写一个功能,从一副牌中取出一张新卡,因为已经有一些卡片出来了。
def trekken(getrokken = []):
import itertools
import random
getrokken = list(getrokken)
kind = 'HCDS'
value = '123456789XJQKA'
deck = ["".join(card) for card in itertools.product(value,kind)]
for i in range(0, len(getrokken)-1): deck.remove(getrokken[i])
return(deck[(random.randint(1, len(deck)))])
当我将这个用于某些示例时,我有时会收到错误消息:
line 16, in trekken
print(deck[(random.randint(1, len(deck)))])
IndexError: list index out of range
例如,输入以下内容:
trekken(['6H', '3C', '3D', '8C', 'AD', '9D', '7D', 'QC'])
也许不是第一次,但经过几次尝试(最多20次)后,我总会收到此错误消息。
答案 0 :(得分:1)
在Python random.randint(low, high)
中也会产生high
,因此len(deck)
可能不适合高,最好选择较小的值,所以请尝试作为最后一行:
return deck[random.randint(0, len(deck)-1)]
甚至更清楚 - 正如@jonrsharpe建议的那样:
return deck[random.randrange(len(deck))]
......或者Martijn Pieters建议:
return random.choice(deck)
注意:Python中的列表索引从0
而不是1
开始,与R
等其他语言一样。