summaryrefslogtreecommitdiffstats
path: root/Weekly Challenges/Week 5/blackjack/hand.py
blob: 3eca5c889422b05807e2edd6345cf9933f9157c5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
from __future__ import annotations
from blackjack.card import CardRank, Card

class Hand:

    max_hand = 21

    def __init__(self):
        self.cards: list(Card) = []

    def add_card(self, card: Card):
        self.cards.append(card)

    def is_natural(self) -> bool:
        if len(self.cards) == 2:
            contains_ace = False
            contains_ten = False
            for card in self.cards:
                if card.rank is CardRank.ACE: contains_ace = True
                elif card.rank.get_value() == CardRank.TEN.get_value(): contains_ten = True
            return contains_ace and contains_ten
        return False

    def get_optimal_value(self) -> int:
        num_aces = 0
        value = 0
        # Add all the values that are not aces
        for card in self.cards:
            if card.rank == CardRank.ACE:
                num_aces += 1
            value += card.rank.get_value()
        if num_aces > 0 and value <= 11:
            value += 10
        return value

    def is_bust(self) -> bool:
        return self.get_optimal_value() > self.max_hand

    def __str__(self) -> str:
        return str.join(" ", [str(card) for card in self.cards])