“ValueError:list.remove(x):x不在列表中”,由于随机数?

时间:2016-11-26 17:15:46

标签: python random

我正在编写一个功能,从一副牌中取出一张新卡,因为已经有一些卡片出来了。

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次)后,我总会收到此错误消息。

1 个答案:

答案 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等其他语言一样。