python тузы блэкджека ломают мои вычисления кода - PullRequest
0 голосов
/ 05 марта 2020

Я кодирую игру в блэкджек. Я добавляю все карты, включая королевских и тузов, а также 2–10. У меня проблемы с тузами. Моя проблема в том, что я могу вычислить все карты перед вычислением A, чтобы прояснить это, я имею в виду, что я хочу вычислить ВСЕ карты прежде, чем ЛЮБЫЕ тузы в списке, чтобы я мог видеть, будет ли сумма больше 11, если так, то просто добавьте 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

1 Ответ

1 голос
/ 05 марта 2020

Я бы предложил итого + = 1, тузы + = 1, а затем в конце добавьте 10, если необходимо для каждого туза.

Несколько указателей на вопрос: не размещайте функцию раздачи, как это совершенно не имеет значения. Опубликовать ввод, вывод и ожидаемый вывод

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

Я изменил «список» на «рука», потому что это скрывая имя встроенного класса, но в остальном не связывайтесь с ним. Я бы предложил добавить функцию (проверенную модулем), чтобы получить значение карты. Может быть, дикт, который служит в качестве карты имя-значение. Вы можете упростить некоторые условия с помощью оператора «in». Странно, что обрабатывают int, преобразовывая их в строку, а затем обратно в int. Но ничего из этого не имеет прямого отношения к вопросу подсчета тузов.

...