所以我最近开始认真地使用 Automate the Boring the Stuff 进行编程,在阅读了有关基本语法的章节后,我决定开始制作 Blackjack 游戏。但是,我在发牌时遇到了问题。我有主甲板
deck=[2,3,4,5,6,7,8,9,'J','Q','K','A']*4
并有一个单独的空列表,名为 playerHand 。我知道我可以使用 .append 和 random.choice 随机选择一张卡片并将其添加到 playerHand[] ,但这不会从 deck[] 中删除卡片。
我能想到的唯一方法是随机生成一个介于 1 和牌组中剩余卡片数量之间的数字,将一个变量设置为该数字,将另一个变量设置为该索引处的卡片,将该卡片添加到 playerHand[] ,然后最后删除 deck[] 中该索引处的卡。
有没有不涉及 2 个临时变量的方法?
请您参考如下方法:
是的,使用 list.pop。
list.pop 将删除给定索引处的值并将其返回:
In [105]: l = [1, 2, 3, 4]
In [106]: l.pop(2) # here 2 is the index, at index 2 we have value 3
Out[106]: 3
In [107]: l
Out[107]: [1, 2, 4]
请注意,默认情况下,pop 将pop 最后一个索引 (l[-1]) 处的值。
因此,在您的情况下,您可以对列表进行 random.shuffle 操作并pop:
In [108]: deck=[2,3,4,5,6,7,8,9,'J','Q','K','A']*4
In [109]: random.shuffle(deck)
In [110]: deck.pop()
Out[110]: 7
