我已经编写了一个功能,可以对52张牌(整数列表)进行随机播放,并将它们平均分配给4个不同的玩家,即4个玩家每张应该获得13张牌。然而由于某些原因,当我运行它时,所有玩家各得到52张牌,一个洗牌版的牌组,有人可以提供一些帮助,如何改变下面的代码来均匀地切割牌组并将其交给每个玩家?
def deal_cards(deck, Nplayers):
shuffle(deck)
cards = len(deck)
hands = Nplayers*[[]]
if Nplayers == 0:
return None
for card in range(cards):
player = card % Nplayers
hands[player].append(deck[card])
return hands
答案 0 :(得分:0)
您没有构建4个列表,您正在构建一个列表,引用了4次:
hands = Nplayers*[[]]
乘以列表不会创建值的副本;而只复制引用;附加到hands[0]
的内容将反映在同一列表的所有其他引用中。
使用列表理解:
hands = [[] for _ in range(Nplayers)]
使用切片最容易:
def deal_cards(deck, Nplayers):
shuffle(deck)
l = len(deck)
portion = l // Nplayers
return [deck[i:i + portion] for i in range(0, len(deck), portion]