<p>在回答你的问题的同时,请允许我给你一些提示</p>
<ol>
<li><p>如果只需执行一次,请不要将printMenu设置为函数。即使需要多次使用,也可以在函数外部定义菜单,除非每次调用函数时都需要重新定义菜单</p>
</li>
<li><p>在buildDeck中,可以在函数外部编写套装和甲板,就像使用菜单一样。
<code>deck.append(list([i, x]))</code>可以写为<code>deck.append([i, x])</code>,因为[i,x]已经是一个列表</p>
</li>
<li><p>在StartNewName中,调用BuildDeck不起任何作用,因为它生成的甲板没有分配给任何对象,并且您稍后将再次使用BuildDeck。Sean C的建议也是正确的-使用[]而不是None,然后简单地追加</p>
</li>
<li><p>在PullCards中,不需要使用random.shuffle,因为您稍后会使用randint,除非您必须在某个时候打印牌组。即使这样,您也可以稍后删除randint-保留其中一个。
现在是PullCards中的循环</p>
</li>
</ol>
<pre><code>for cards in deck:
if deck.count(cards) >= 9:
#draws 3 random cards and pop() removes cards from the deck
for i in range(3):
randomCard = deck.pop(random.randint(0, len(deck) - 1))
for keys in playerHand.keys():
playerHand[keys] = randomCard
</code></pre>
<p>这是你的原始代码。
这里的一个问题是,由于<code>for cards in deck:</code>,这段代码将运行48次。我认为您不是有意这么做的,您可以安全地删除for循环和一个缩进级别。
另一个是,该代码选择一张随机牌,并给所有3名玩家相同的牌。最后是因为<code>playerHand[keys] = randomCard</code>,第三张随机卡是字典中分配给每个玩家键的值。您需要的是一个列表作为每个玩家键的值,每个列表有3张牌</p>
<p>为了解决这两个问题,首先我们将<code>randomCard = deck.pop(random.randint(0, len(deck) - 1))</code>移动到第二个for循环中。
由此:</p>
<pre><code>for i in range(3):
randomCard = deck.pop(random.randint(0, len(deck) - 1))
for keys in playerHand.keys():
playerHand[keys] = randomCard
</code></pre>
<p>为此:</p>
<pre><code>for i in range(3):
for keys in playerHand.keys():
randomCard = deck.pop(random.randint(0, len(deck) - 1))
playerHand[keys] = randomCard
</code></pre>
<p>并将{<cd4>}更改为{<cd7>},如Sean C所建议的,这样每个玩家键的值(我们之前更改为空列表)都会附加3张卡(即那些卡,[i,x]列表,现在是该列表的元素)</p>
<p>希望这有帮助</p>