卡交易功能问题

时间:2013-11-27 12:50:19

标签: python python-3.x

我已经编写了一个功能,可以对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

1 个答案:

答案 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]