0

下面是我编写的程序的一部分代码,它绝对是非常基本的。

pc1 = random.choice(cards)
cca1 = random.choice(cards)
while (pc1 == cca1):
    cca1 = random.choice(cards)
ccb1 = random.choice(cards)
while (pc1 == ccb1) or (cca1 == ccb1):
    ccb1 = random.choice(cards)

pc1,cca1并且ccb1只是变量的名称,为了便于使用而缩短了。这部分代码所做的是尝试从名为卡的字典中获取 3 个条目。它使用while函数来确保选择的卡片不一样;他们将永远不同。

这种情况一直持续到我的 52 字典中有 9 个唯一变量,并且它工作正常,除了有时会产生以下错误:

Traceback (most recent call last):
  File "C:\Python33\Programs\Poker\1.0.py", line 231, in <module>
    ccc2 = random.choice(cards)
  File "C:\Python33\lib\random.py", line 252, in choice
    return seq[i]
KeyError: 0

上述错误中的变量ccc2

该错误仅在有时发生(有时程序运行良好,有时它显示错误),并且它发生的行也随着每次出现而变化。我知道我的代码效率低下,但我真的只是想阻止这个错误,也许还有一些关于如何改进的有用想法/提示。

再次; 做了它应该做的,但无法识别地返回看似随机的时间提到的错误,原因似乎是随机的。

提前致谢!

4

1 回答 1

5

工作方式random.choice是为序列设计的,而不是映射。它选择索引,因此有时会尝试cards[0],这显然不是有效的键。错误出现随机的原因当然是因为它取决于random!

您可以通过从序列中显式选择来解决此问题:

random.choice(list(cards))

要更普遍地改进您的代码,请注意random还包括sample

rcards = random.sample(list(cards), 3) # pick three random cards

请注意,在这两种情况下,我们都会从字典中随机选择键。

于 2014-02-12T18:06:38.623 回答