python二十一点Ace破坏了我的代码计算

问题描述 投票:0回答:1

我正在编写二十一点游戏。我附加了所有卡片,包括皇室和王牌以及2到10。我遇到的麻烦是王牌。我的问题是能够在计算A之前计算所有纸牌,以澄清这一点,我的意思是我想在列表中的所有A之前计算所有纸牌,这样我就能知道总数是否大于11,如果是,那么只需为1加1如果没有,请添加11。到目前为止,我的代码:

import random

def dealhand(): #This function appends 2 cards to the deck and converts royals and aces to letters.
    player_hand = []
    for card in range(0,2):
        card = random.randint(1,13)
        if card == 1:
            card = "A"
        if card == 11:
            card = "J"
        if card == 12:
            card = "Q"
        if card == 13:
            card = "K"
        player_hand.append(card)
    return player_hand

#this function sums the given cards to the user
def sumHand(list):
    total = 0
    for card in list:
        card = str(card)
        if card == "J" or card == "Q" or card== "K":
            total+=10
            continue
        elif card == "2" or card == "3" or card == "4" or card == "5" or card == "6" or card == "7" or card == "8" or card == "9" or card == "10":
            total += int(card)
        elif card == "A":
            if total<11:
                total+=11
            else:
                total+=1
    return total
python blackjack
1个回答
0
投票

我建议总数+ = 1,王牌+ = 1,然后在末尾,如果需要为每个王牌加10。

一些问题的提示:不要发布dealhand函数,因为这完全不相关。发布输入,输出和预期输出

def sumHand(hand):
    ...

hand = ['A', 'K', 'Q']
expected 21
actual 31

这是我建议的解决方法(此特定问题的最小更改)

def sumHand(hand):
    total = 0
    aces = 0
    for card in hand:
        card = str(card)
        if card == "J" or card == "Q" or card== "K":
            total+=10
            continue
        elif card == "2" or card == "3" or card == "4" or card == "5" or card == "6" or card == "7" or card == "8" or card == "9" or card == "10":
            total += int(card)
        elif card == "A":
            total += 1
            aces += 1
    for _ in range(aces):
        if total <= 11:
            total += 10
    return total

我将“ list”更改为“ hand”,因为这隐藏了内置类的名称,但除此之外没有造成混乱。我建议添加一个(经过单元测试的)函数以获取卡的价值。也许是一个用作名称-值映射的字典。您可以使用“ in”运算符简化某些条件。通过将int转换为string然后再返回int来处理int是很奇怪的。但是,这些都不与计数王牌的问题直接相关。

© www.soinside.com 2019 - 2024. All rights reserved.