This is my solution to the Codecademy Pro Project “Games of Chance” using Python to generate and work with random numbers. The aim is to prduce a number of functions simulating popular games of chance, and taking in parameters to represent a “bet” and in some cases a “call”. Includes the “extra challenge” solutions.

import random

money = 100

#Write your game of chance functions here

#function to play a simple game of coin toss with player guessing Heads or Tails

def coin_toss(guess, bet):
  if bet > money:
    print('You don\'t have enough green to place that bet!')
    print('The maximum bet you can make is £' + str(money))
    return 0
  if (guess != 'Heads') and (guess != 'Tails'):
    print('Invalid guess. You can choose Heads or Tails.')
    return 0
  toss = random.randint(1, 2)
  if (guess == 'Heads') and (toss == 1):
    print('Lucky guess! The toss is Heads. You win!')
    return bet
  elif (guess == 'Tails') and (toss == 2):
    print('Lucky guess! The toss is Tails. You win!')
    return bet
  else:
    if toss == 1:
      print('The toss was Heads. You lose.')
    if toss == 2:
      print('The toss was Tails. You lose.')
    return -bet

#function to play cho-han, with player guessing if the sum of two dice rolled together will be Odd or Even

def cho_han(guess, bet):
  if bet > money:
    print('You don\'t have enough green to place that bet!')
    print('The maximum bet you can make is £' + str(money))
    return 0
  if (guess != 'Even') and (guess != 'Odd'):
    print('Invalid guess. You can choose Odd or Even.')
    return 0
  dice1 = random.randint(1, 6)
  dice2 = random.randint(1, 6)
  result = dice1 + dice2
  mod_result = result % 2
  if (guess == 'Even') and ((result % 2) == 0):
    print('The dice rolls were ' + str(dice1) + ' and ' + str(dice2) + '. The total is ' + str(result) + ' - an EVEN number. You win!')
    return bet
  elif (guess == 'Odd') and ((result % 2) != 0):
    print('The dice rolls were ' + str(dice1) + ' and ' + str(dice2) + '. The total is ' + str(result) + ' - an ODD number. You win!')
    return bet
  else:
    if mod_result == 0:
      print('The dice rolls were ' + str(dice1) + ' and ' + str(dice2) + '. The total is ' + str(result) + ' - an EVEN number.')
    else:
      print('The dice rolls were ' + str(dice1) + ' and ' + str(dice2) + '. The total is ' + str(result) + ' - an ODD number.')
    print('You lose.')
    return - bet

#function to play a game where the dealer and player each draw a card from a full pack. The higher card wins.

def higher_lower(bet):
  if bet > money:
    print('You don\'t have enough green to place that bet!')
    print('The maximum bet you can make is £' + str(money))
    return 0
  #Create deck with four suits of value 0-12; once player 1 card is selected this value will not be available for player 2 increasing probability of a different number. 
  deck = []
  for i in range(13):
    for j in range(4):
      deck.append(i)
  player1 = deck.pop(random.randint(0, len(deck)))
  player2 = deck.pop(random.randint(0, len(deck)))
  card_names = ['an Ace. Aces Low!', 'a Two.', 'a Three.', 'a Four.', 'a Five.', 'a Six.', 'a Seven.', 'an Eight.', 'a Nine.', 'a Ten.', 'a Jack.', 'a Queen.', 'a King.']
  print('Dealer drew ' + card_names[player1] + ' Player drew ' + card_names[player2])
  if player1 == player2:
    print('We have a tie! You keep your bet.')
    return 0
  elif player1 > player2:
    print('Dealer wins! You lose your bet.')
    return -bet
  else:
    print('You win! You double your bet.')
    return bet

#function to play basic American roulette where the player can choose Odd or Even

def basic_roulette(guess, bet):
  if bet > money:
    print('You don\'t have enough green to place that bet!')
    print('The maximum bet you can make is £' + str(money))
    return 0
  if (guess != 'Even') and (guess != 'Odd'):
    print('Invalid guess. You can choose Odd or Even.')
    return 0
  pocket = random.randint(0, 38)
  if pocket == 0:
    print('The ball lands in the green 0 pocket. You lose.')
    return -bet
  elif pocket == 37:
    print('The ball lands in the green 00 pocket, You lose.') 
    return - bet
  elif (guess == 'Odd') and ((pocket % 2) != 0):
    print('The ball lands in pocket ' + str(pocket) + ', an odd number. You win!')
    return bet
  elif (guess == 'Even') and ((pocket %2) == 0):
    print('The ball lands in pocket ' + str(pocket) + ', an even number. You win!')
    return bet
  elif (pocket%2) == 0:
    print('The ball lands in pocket ' + str(pocket) + ', an even number. You bet odd. You lose.')
    return - bet
  else:
    print('The ball lands in pocket ' + str(pocket) + ', an odd number. You bet even. You lose.')
    return - bet

#Utility function to display running total of money remaining.

def print_money():
  print('You now have £' + str(money) + ' remaining.')

#utility function to simulate playing the games

def auto_game(ct_guess, ct_bet, ch_guess, ch_bet, card_bet, rou_guess, rou_bet):
  global money
  print('You bet £' + str(ct_bet) + ' at Coin Toss.')
  money += coin_toss(ct_guess, ct_bet)
  print_money()
  print('You bet £' + str(ch_bet) + ' at Cho-Han.')
  money += cho_han(ch_guess, ch_bet)
  print_money()
  print('You bet £' + str(card_bet) + ' at Hi/Lo Cards.')
  money += higher_lower(card_bet)
  print_money()
  print('You bet £' + str(rou_bet) + ' at American Roulette.')
  money += basic_roulette(rou_guess, rou_bet) 
  print('You leave the casino with £' + str(money) + ' having played all the games. Please gamble responsibly.')
  

#Call your game of chance functions here
auto_game('Heads', 50, 'Even', 100, 50, 'Odd', 50)