-
Notifications
You must be signed in to change notification settings - Fork 0
/
black_jack.py
78 lines (53 loc) · 2.46 KB
/
black_jack.py
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
"""Functions to help play and score a game of blackjack.
How to play blackjack: https://bicyclecards.com/how-to-play/blackjack/
"Standard" playing cards: https://en.wikipedia.org/wiki/Standard_52-card_deck
"""
def value_of_card(card):
"""Determine the scoring value of a card.
:param card: str - given card.
:return: int - value of a given card (J, Q, K = 10, 'A' = 1) numerical value otherwise.
"""
if card.isnumeric():
return int(card)
if card == 'A':
return 1
if card in 'KJQ':
return 10
# error
return 0
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. J, Q, K = 10, 'A' = 1, all others are numerical value.
:return: higher value card - str. Tuple of both cards if they are of equal value.
"""
if value_of_card(card_one) > value_of_card(card_two):
return card_one
if value_of_card(card_one) < value_of_card(card_two):
return card_two
return (card_one, card_two)
def value_of_ace(card_one, card_two):
"""Calculate the most advantageous value for the ace card.
:param card_one, card_two: str - card (J, Q, K == 10, numerical value otherwise)
:return: int - value of the upcoming ace card (either 1 or 11).
"""
if value_of_card(card_one) + value_of_card(card_two) > 10:
return 1
return 11
def is_blackjack(card_one, card_two):
"""Determine if the hand is a 'natural' or 'blackjack'.
:param card_one, card_two: str - cards dealt. J, Q, K = 10, 'A' = 11, all others are numerical value.
:return: bool - if the hand is a blackjack (two cards worth 21).
"""
return (value_of_card(card_one) == 10 and card_two == 'A') or (value_of_card(card_two) == 10 and card_one == 'A')
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 in hand.
:return: bool - if the hand can be split into two pairs (i.e. cards are of the same value).
"""
return value_of_card(card_one) == value_of_card(card_two)
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 - if the hand can be doubled down (i.e. totals 9, 10 or 11 points).
"""
return 9 <= value_of_card(card_one) + value_of_card(card_two) <= 11