DAY8: Python day 11
Published: 2023-12-03 14:41:09

**Capstone Project: BlackJack**
```
#Hint 4: Create a deal_card() function that uses the List below to *return* a random card.
#11 is the Ace.
#cards = [11, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10]
import random 
import replit
from art import logo
cards = [11, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10]
restart = True 

while restart == True: 
  print(logo)
  def deal_card(): 
    card_number = random.randrange(0, 12)
    return cards[card_number]
  #Hint 5: Deal the user and computer 2 cards each using deal_card() and append().
  user_cards = []
  computer_cards = []
  is_game_over = False
  
  for _ in range(2):
    new_card = deal_card()
    user_cards.append(new_card)
  
  for _ in range(2):
    new_card = deal_card()
    computer_cards.append(new_card)
    
  #Hint 6: Create a function called calculate_score() that takes a List of cards as input 
  #and returns the score. 
  #Look up the sum() function to help you do this.
  def calculate_score(list): 
    score = sum(list)
    
  #Hint 7: Inside calculate_score() check for a blackjack (a hand with only 2 cards: ace + 10) and return 0 instead of the actual score. 0 will represent a blackjack in our game.
    if score == 21 and len(list) == 2: 
      return 0 
      
  #Hint 8: Inside calculate_score() check for an 11 (ace). If the score is already over 21, remove the 11 and replace it with a 1. You might need to look up append() and remove().
    if 11 in list and score > 21: 
        list.remove(11)
        list.append(1)
        score = sum(list)
    return score
        
  #Hint 9: Call calculate_score(). If the computer or the user has a blackjack (0) or if the user's score is over 21, then the game ends.
  while is_game_over == False: 
    computer_score = calculate_score(computer_cards)
    user_score = calculate_score(user_cards)
    print(f"Your cards: {user_cards}, current_score: {user_score}")
    print(f"Computer's first card: {computer_cards[0]}")
    
    if user_score == 0 or computer_score == 0 or user_score > 21: 
      is_game_over = True 
    else: 
  #Hint 10: If the game has not ended, ask the user if they want to draw another card. If yes, then use the deal_card() function to add another card to the user_cards List. If no, then the game has ended.
      if input("Do you want to draw another card? 'y' or 'n': ") == "y":
        user_cards.append(deal_card())
      else: 
        is_game_over = True 
      
  #Hint 11: The score will need to be rechecked with every new card drawn and the checks in Hint 9 need to be repeated until the game ends.
  
  #Hint 12: Once the user is done, it's time to let the computer play. The computer should keep drawing cards as long as it has a score less than 17.
  while computer_score != 0 and computer_score < 17:
    computer_cards.append(deal_card())
    computer_score = calculate_score(computer_cards)
    

  #Hint 13: Create a function called compare() and pass in the user_score and computer_score. If the computer and user both have the same score, then it's a draw. If the computer has a blackjack (0), then the user loses. If the user has a blackjack (0), then the user wins. If the user_score is over 21, then the user loses. If the computer_score is over 21, then the computer loses. If none of the above, then the player with the highest score wins.
  def compare(): 
    print(f"Your final hand: {user_cards}, final score: {user_score}")
    print(f"Computer's final hand: {computer_cards}, final score: {computer_score}")
    if computer_score == user_score: 
      print("Draw")
    elif user_score == 0: 
      print("BlackJack. You win!")
    elif computer_score == 0: 
      print("BlackJack. Computer wins")
    elif user_score > 21: 
      print("Bust. Computer wins!")
    elif computer_score > 21: 
      print("Bust. You win!")
    else: 
      if user_score > computer_score: 
        print("You Win!")
      else: 
        print("Computer wins.")
  compare()
  #Hint 14: Ask the user if they want to restart the game. If they answer yes, clear the console and start a new game of blackjack and show the logo from art.py.
  if input("restart game? 'y' or 'n': ") == "y": 
    replit.clear()
  else: 
    restart == False
```
This took me about two hours. I struggled with deciding the correct spot to put the `while()` loop because I tried to calculate and compare the scores every time a card was drawn. So, I resigned and followed the hints. Somewhat shameful, but I see I am getting proficient with the concepts I learned, so proud as well.