信用卡交易功能

2024-03-29 00:42:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我写了一个函数来洗牌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

Tags: 函数代码列表returndef玩家整数card
1条回答
网友
1楼 · 发布于 2024-03-29 00:42:45

您不是在构建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]

相关问题 更多 >