在发第二张牌之前先给每个玩家发一张牌-Python中的21点游戏

在发第二张牌之前先给每个玩家发一张牌-Python中的21点游戏,python,python-3.x,blackjack,Python,Python 3.x,Blackjack,我用Python编写了以下代码。其中deck=deck\u of_cards()。我的问题是如何修复第二个函数,以便它必须在发第二张牌之前向每个玩家发第一张牌。现在的方式似乎是先给一个玩家发两张牌,然后再给其他玩家发牌,我不知道如何解决这个问题 import random def deck_of_cards(): suits = ['D', 'C', 'H', 'S'] denominations = ['2', '3', '4', '5', '6', '7', '8',

我用Python编写了以下代码。其中deck=deck\u of_cards()。我的问题是如何修复第二个函数,以便它必须在发第二张牌之前向每个玩家发第一张牌。现在的方式似乎是先给一个玩家发两张牌,然后再给其他玩家发牌,我不知道如何解决这个问题

import random
def deck_of_cards():
    suits = ['D', 'C', 'H', 'S']
    denominations = ['2', '3', '4', '5', '6', '7', '8', 
                     '9', 'T', 'J', 'Q', 'K', 'A']
    deck = []
    for suit in suits:
        for denomination in denominations:
            ds = denomination + suit
            deck.append(ds)

    random.shuffle(deck)      
    return deck

def deal_cards(deck, players):
    hands = []

    for j in range(players):
        player_hand = []
        for i in range(2):
            cards = deck.pop(0)
            player_hand.append(cards)

        hands.append(player_hand)  
    return hands 

您需要交换for循环,以便在所有玩家中迭代第一辆车,然后是第二辆车:

def deal_cards(deck, players):
    hands = [[] for player in range(players)]

    for _ in range(2):
        for hand in hands:
            hand.append(deck.pop(0))

    return hands 

这里的问题是
player\u hand
的实现。开始迭代,实例化
玩家的手牌
,然后为每个玩家追加该手牌。每个玩家都需要一手新牌。带有
hand
属性和
add\u to\u hand()
方法的
Player
类将是干净的。是的,我现在修复了它。是的,用于所有密集用途。但是我们怎么知道哪个玩家有什么牌呢?我让OP在课堂设计中解决这个问题。解决方案回答了这个问题。手和玩家的顺序相同,假设玩家是有序的集合。我同意你的观点@pstatix,OO非常适合这个应用程序;然而,当OP决定改变他的设计、面临困难并请求帮助时,我们需要等待OP的问题。