我是编程新手,正在为这个项目创建一个程序的一部分: http://www.reddit.com/r/beginnerprojects/comments/19ot36/project_a_variation_of_21/ 当我遇到索引错误。使用Stackoverflow答案,我最初通过制作
来纠正错误random.randrange(0,len(cards)+1)]
而不是
random.randrange(0,53,1)]
然而它继续给我这个错误。如果你运行50次它可能不会给你一个错误,但它也可能在你第一次或第五次运行时给你一个错误。对于圆形功能,我希望能够从单个牌组中处理牌,每次我拿出一张卡牌将其从牌组中移除。任何建议将非常感谢! - 托马斯
错误讯息:
Traceback (most recent call last):
File "<string>", line 420, in run_nodebug
File "<module2>", line 39, in <module>
File "<module2>", line 30, in round
File "<module2>", line 26, in draw
代码:
def round():
cards = ["2", "2", "2", "2", "3", "3", "3", "3", "4", "4", "4", "4", "5",
"5", "5", "5", "6", "6", "6", "6", "7", "7","7","7","8", "8", "8", "8", "9",
"9", "9", "9", "10", "10", "10", "10", "Jack", "Jack", "Jack", "Jack",
"Queen", "Queen", "Queen", "Queen", "King", "King", "King", "King", "Ace", "Ace",
"Ace", "Ace"]
def draw():
return cards[random.randrange(0,len(cards)+1,1)]
acards = []
aroundscore = 0
acards.append(draw())
acards.append(draw())
print(acards)
print(acards)
cardsvalues = {"2":2, "3":3, "4":4, "5":5, "6":6, "7":7, "8":8, "9":9,
"10":10, "Jack":10, "Queen":10, "King":10, "Ace":1}
for i in acards:
print(cardsvalues[i])
答案 0 :(得分:1)
您使用len(cards)
的原因是因为如果您发卡,卡的数量可能会发生变化!您的行应该是len(cards)
而不是len(cards) + 1
,因为如果您在cards
的最大长度上添加一行,那么它可以随机选择一个大于您拥有的卡数量的数字,从而导致IndexError
答案 1 :(得分:1)
您的draw
函数发生错误,因为您的范围过大:random.randrange(0,len(cards)+1,1)
。考虑一下,例如len(cards)
是否为3.然后,rangerange
将被0, 4, 1
调用,这意味着它将返回0到3之间的整数。但索引{{1不存在 - 这是一个错误的错误。
我建议您只使用3
来完成您想要的任务。它更加简洁和可读。
random.choice
答案 2 :(得分:0)
使用random.randint(0,51) 我认为你对卡的长度感到困惑。
答案 3 :(得分:0)
我同意上述建议。但是还有一件事:randrange并不保证生成的数字会有所不同。您可以获得一些相同值的数字。对于纸牌游戏来说非常糟糕 - 因为游戏中的每张牌都必须是唯一的。我建议使用random.shuffle并从头开始逐一从名单中取出卡片。