From f32cd301685a8659becd03625112559557d435da Mon Sep 17 00:00:00 2001 From: "exercism-solutions-syncer[bot]" <211797793+exercism-solutions-syncer[bot]@users.noreply.github.com> Date: Tue, 5 Aug 2025 10:00:10 +0000 Subject: [PATCH] [Sync Iteration] python/black-jack/1 --- solutions/python/black-jack/1/black_jack.py | 91 +++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 solutions/python/black-jack/1/black_jack.py diff --git a/solutions/python/black-jack/1/black_jack.py b/solutions/python/black-jack/1/black_jack.py new file mode 100644 index 0000000..35db344 --- /dev/null +++ b/solutions/python/black-jack/1/black_jack.py @@ -0,0 +1,91 @@ + + +def value_of_card(card): + """Determine the scoring value of a card. + + :param card: str - given card. + :return: int - value of a given card. See below for values. + + 1. 'J', 'Q', or 'K' (otherwise known as "face cards") = 10 + 2. 'A' (ace card) = 1 + 3. '2' - '10' = numerical value. + """ + if card == "J" or card == "Q" or card == "K": + return 10 + elif card == "A": + return 1 + else: + return int(card) + pass + + +def higher_card(card_one, card_two): + """Determine which card has a higher value in the hand. + + :param card_one, card_two: str - cards dealt in hand. See below for values. + :return: str or tuple - resulting Tuple contains both cards if they are of equal value. + + 1. 'J', 'Q', or 'K' (otherwise known as "face cards") = 10 + 2. 'A' (ace card) = 1 + 3. '2' - '10' = numerical value. + """ + if (value_of_card(card_one) > value_of_card(card_two)): + return card_one + elif value_of_card(card_one) < value_of_card(card_two): + return card_two + return card_one, card_two + pass + + +def value_of_ace(card_one, card_two): + """Calculate the most advantageous value for the ace card. + + :param card_one, card_two: str - card dealt. See below for values. + :return: int - either 1 or 11 value of the upcoming ace card. + + 1. 'J', 'Q', or 'K' (otherwise known as "face cards") = 10 + 2. 'A' (ace card) = 11 (if already in hand) + 3. '2' - '10' = numerical value. + """ + if (value_of_card(card_one) + value_of_card(card_two) <= 10): + if (card_one != "A" and card_two != "A"): + return 11 + return 1 +def is_blackjack(card_one, card_two): + """Determine if the hand is a 'natural' or 'blackjack'. + + :param card_one, card_two: str - card dealt. See below for values. + :return: bool - is the hand is a blackjack (two cards worth 21). + + 1. 'J', 'Q', or 'K' (otherwise known as "face cards") = 10 + 2. 'A' (ace card) = 11 (if already in hand) + 3. '2' - '10' = numerical value. + """ + if (card_one == "A" or card_two == "A") and (value_of_card(card_one) == 10 or value_of_card(card_two) == 10): + return True + return False + + +def can_split_pairs(card_one, card_two): + """Determine if a player can split their hand into two hands. + + :param card_one, card_two: str - cards dealt. + :return: bool - can the hand be split into two pairs? (i.e. cards are of the same value). + """ + if (value_of_card(card_one) == value_of_card(card_two)): + return True + return False + pass + + +def can_double_down(card_one, card_two): + """Determine if a blackjack player can place a double down bet. + + :param card_one, card_two: str - first and second cards in hand. + :return: bool - can the hand can be doubled down? (i.e. totals 9, 10 or 11 points). + """ + sum = value_of_card(card_one) + value_of_card(card_two) + if (sum >= 9 and sum <= 11): + return True + return False + pass