44# Import dependencies
55import random
66
7- # Define function
8- def playBlackjack ():
9- # Set up card class
10- class Card (object ):
11- def __init__ (self , number , suit , name , value ):
12- self .number = number
13- self .suit = suit
14- self .name = name
15- self .value = value
167
8+ # Set up card class
9+ class Card (object ):
10+ def __init__ (self , number , suit , name , value ):
11+ self .number = number
12+ self .suit = suit
13+ self .name = name
14+ self .value = value
15+
16+
17+ # Define function to calculate hand value
18+ def calcHandValue (hand ):
19+ handValue = 0
20+ for card in hand :
21+ handValue += card .value
22+ return handValue
23+
24+
25+ # Define function to print current card value
26+ def printCurrentValue (currentValue ):
27+ print (f'The current value of your cards is { currentValue } .' )
28+
29+
30+ # Define main function
31+ def playBlackjack ():
1732 # Set up deck
1833 cardDeck = []
1934 def genCardDeck ():
20- sH = 'hearts'
21- sD = 'diamonds'
22- sS = 'spades'
23- sC = 'clubs'
35+ suits = ['hearts' , 'diamonds' ,'spades' ,'clubs' ]
36+ faces = ['ace' , 'two' , 'three' , 'four' , 'five' , 'six' , 'seven' ,
37+ 'eight' , 'nine' , 'ten' , 'jack' , 'queen' , 'king' ]
2438 cardDeck .clear ()
25- cardDeck .append (Card (1 , sH , 'ace' , 1 ))
26- cardDeck .append (Card (2 , sH , 'two' , 2 ))
27- cardDeck .append (Card (3 , sH , 'three' , 3 ))
28- cardDeck .append (Card (4 , sH , 'four' , 4 ))
29- cardDeck .append (Card (5 , sH , 'five' , 5 ))
30- cardDeck .append (Card (6 , sH , 'six' , 6 ))
31- cardDeck .append (Card (7 , sH , 'seven' , 7 ))
32- cardDeck .append (Card (8 , sH , 'eight' , 8 ))
33- cardDeck .append (Card (9 , sH , 'nine' , 9 ))
34- cardDeck .append (Card (10 , sH , 'ten' , 10 ))
35- cardDeck .append (Card (11 , sH , 'jack' , 10 ))
36- cardDeck .append (Card (12 , sH , 'queen' , 10 ))
37- cardDeck .append (Card (13 , sH , 'king' , 10 ))
38- cardDeck .append (Card (14 , sD , 'ace' , 1 ))
39- cardDeck .append (Card (15 , sD , 'two' , 2 ))
40- cardDeck .append (Card (16 , sD , 'three' , 3 ))
41- cardDeck .append (Card (17 , sD , 'four' , 4 ))
42- cardDeck .append (Card (18 , sD , 'five' , 5 ))
43- cardDeck .append (Card (19 , sD , 'six' , 6 ))
44- cardDeck .append (Card (20 , sD , 'seven' , 7 ))
45- cardDeck .append (Card (21 , sD , 'eight' , 8 ))
46- cardDeck .append (Card (22 , sD , 'nine' , 9 ))
47- cardDeck .append (Card (23 , sD , 'ten' , 10 ))
48- cardDeck .append (Card (24 , sD , 'jack' , 10 ))
49- cardDeck .append (Card (25 , sD , 'queen' , 10 ))
50- cardDeck .append (Card (26 , sD , 'king' , 10 ))
51- cardDeck .append (Card (27 , sS , 'ace' , 1 ))
52- cardDeck .append (Card (28 , sS , 'two' , 2 ))
53- cardDeck .append (Card (29 , sS , 'three' , 3 ))
54- cardDeck .append (Card (30 , sS , 'four' , 4 ))
55- cardDeck .append (Card (31 , sS , 'five' , 5 ))
56- cardDeck .append (Card (32 , sS , 'six' , 6 ))
57- cardDeck .append (Card (33 , sS , 'seven' , 7 ))
58- cardDeck .append (Card (34 , sS , 'eight' , 8 ))
59- cardDeck .append (Card (35 , sS , 'nine' , 9 ))
60- cardDeck .append (Card (36 , sS , 'ten' , 10 ))
61- cardDeck .append (Card (37 , sS , 'jack' , 10 ))
62- cardDeck .append (Card (38 , sS , 'queen' , 10 ))
63- cardDeck .append (Card (39 , sS , 'king' , 10 ))
64- cardDeck .append (Card (40 , sC , 'ace' , 1 ))
65- cardDeck .append (Card (41 , sC , 'two' , 2 ))
66- cardDeck .append (Card (42 , sC , 'three' , 3 ))
67- cardDeck .append (Card (43 , sC , 'four' , 4 ))
68- cardDeck .append (Card (44 , sC , 'five' , 5 ))
69- cardDeck .append (Card (45 , sC , 'six' , 6 ))
70- cardDeck .append (Card (46 , sC , 'seven' , 7 ))
71- cardDeck .append (Card (47 , sC , 'eight' , 8 ))
72- cardDeck .append (Card (48 , sC , 'nine' , 9 ))
73- cardDeck .append (Card (49 , sC , 'ten' , 10 ))
74- cardDeck .append (Card (50 , sC , 'jack' , 10 ))
75- cardDeck .append (Card (51 , sC , 'queen' , 10 ))
76- cardDeck .append (Card (52 , sC , 'king' , 10 ))
39+
40+ # Card number must be unique. Keep track of it here
41+ uniqueCardNumber = 1
42+ for i in range (4 ):
43+ for j in range (1 , 14 ):
44+ # Jack, queen, and king are all ten
45+ suitCardNo = 10 if (j > 10 ) else j
46+ cardDeck .append (Card (uniqueCardNumber , suits [i ], faces [j - 1 ], suitCardNo ))
47+ uniqueCardNumber += 1
7748
7849 # Set up user's hand
7950 hand = []
@@ -85,34 +56,22 @@ def genCardDeck():
8556 # Define function to process a turn
8657 def hitOrStand ():
8758 choice = input ('Would you like to hit or stand? ' )
88- if (choice .lower () == 'hit' ) or ( choice . lower () == 'h' ):
59+ if (choice .lower () in [ 'hit' , 'h' ] ):
8960 print ('Dealing new card...' )
9061 takeNewCard ()
91- bustReturn = calcHandValue ()
62+ bustReturn = calcHandValue (hand )
9263 if bustReturn > 21 :
9364 print ('Bust! Subtracting 21 points.' )
9465 global earnedScore
9566 earnedScore -= 21
9667 elif bustReturn == 21 :
9768 print ('Perfect 21! Ending turn.' )
9869 else :
99- currentValue ( )
70+ printCurrentValue ( calcHandValue ( hand ) )
10071 hitOrStand ()
101- elif (choice .lower () == 'stand' ) or ( choice . lower () == 's' ):
72+ elif (choice .lower () in [ 'stand' , 's' ] ):
10273 print ('Ending turn...' )
103- endTurn (calcHandValue ())
104-
105- # Define function to print current card value
106- def currentValue ():
107- value = calcHandValue ()
108- print (f'The current value of your cards is { value } .' )
109-
110- # Define function to calculate hand value
111- def calcHandValue ():
112- handValue = 0
113- for card in hand :
114- handValue += card .value
115- return handValue
74+ endTurn (calcHandValue (hand ))
11675
11776 # Define function to take a new card
11877 def takeNewCard ():
@@ -133,7 +92,7 @@ def startTurn(i, rounds):
13392 hand .clear ()
13493 takeNewCard ()
13594 takeNewCard ()
136- currentValue ( )
95+ printCurrentValue ( calcHandValue ( hand ) )
13796 hitOrStand ()
13897
13998 # Define function to end turn
@@ -156,16 +115,17 @@ def endTurn(handValue):
156115 if i < rounds :
157116 print (f'Score after round { i } : { earnedScore } ' )
158117 else :
118+ start = f'Final score: { earnedScore } . Grade: '
159119 if earnedScore >= 90 :
160- print (f'Final score: { earnedScore } . Grade: A' )
120+ print (start + ' A' )
161121 elif earnedScore >= 80 :
162- print (f'Final score: { earnedScore } . Grade: B' )
122+ print (start + ' B' )
163123 elif earnedScore >= 70 :
164- print (f'Final score: { earnedScore } . Grade: C' )
124+ print (start + ' C' )
165125 elif earnedScore >= 60 :
166- print (f'Final score: { earnedScore } . Grade: D. ' )
126+ print (start + 'D ' )
167127 else :
168- print (f'Final score: { earnedScore } . Grade: F. ' )
128+ print (start + 'F ' )
169129
170130# Call function
171131playBlackjack ()
0 commit comments