Follow the instruction from Day 1 to create another python project. In this python project, create a file called flip.py
How does a Coin Clip game work?
Normally, it works by someone tossing a coin, which can be a tail or a head, and another person guess before toss. The guesser wins if the guess matches.
If this coin is a perfectly made coin, there should be a 50/50 chance that it would be head/tail.
A very simple coin flip game could work as follow:
- Ask for head or tail
- Flip a coin
- If the guess matches the result, then it’s a win
To build this game, I will work you through the steps, the simplest first, then onto
- Just print “flip a coin” and “It’s a head” to console
- Create a constant variable to hold the value of the coin flip, but pretend that the value is always “head”
- For better style and to reduce duplicate code, create a new file to store the constant variables. Use the constant variables in this new module.
- Create a placeholder variable called “random_val”, but set it to “0.50” (pretend it’s always 0.50) . Add code to check if random_val is larger than 0.50, if so, pring HEAD, else print TAIL
- Ask user for input for random_val (instead of pretend it is always 0.50)
- Instead of getting the random value from the user, get it by calling seed() and random() from the Python random module.
- Improve the “randomness” by using the current timestamp as “seed”. The coin flip should now be fair.
- Add the for loop, so that the coin is flipped 10 times in a roll
- Keep a tally of how many heads and tails are there after 10 coin flips
- Ask the user to enter the number of coin flips (instead of hard-coded it to 10)
- Beautify the output
Step 1: Just print “flip a coin” and “It’s a head” to console
Let’s print two lines to the console: (Note, the line that starts that “#” is a comment and is added to help you understand the code but will not be executed by python interpreter.
# print a value print("flip a coin"); print("It's a head");
Step 2: Create a constant variable to hold the value of the coin flip, but pretend that the value is always “head”
Next, let’s create a variable (“value”) to hold the value of the coin flip:
print("flip a coin"); print("It's a head"); # variable value = "head"; # print the "concatenation" of a value and the value in a variable print("It's a:" + value);
Step 3: For better style and to reduce duplicate code, create a new file to store the constant variables. Use the constant variables in this new module.
Notice the text (“head”)? That value is a “hard-coded” value and is best stored in a constant variable. A constant variable is a variable that holds a value but that value does not change. Let’s create a file to keep all the constant variables and import it to flip.py.
First create a new file called constant.py. Add the code to define two constant variables (HEAD and TAIL):
File constant.py
HEAD="head" TAIL="tail"
Then update the flip.py to import the constant module (by adding “import constant” line). Use the variable (constant.HEAD) in the code.
File: flip.py
import constant print("flip a coin"); print("It's a head"); # variable value = "head"; # print the "concatenation" of a value and the value in a variable print("It's a:" + value); print("It's a:" + constant.HEAD);
Step 4: Create a placeholder variable called “random_val”, but set it to “0.50” (pretend it’s always 0.50) . Add code to check if random_val is larger than 0.50, if so, pring HEAD, else print TAIL
import constant # define a variable random_val = 0.50; if (random_val> 0.50): print(constant.HEAD) else: print(constant.TAIL)
Step 5: Ask user for input for random_val (instead of pretend it is always 0.50)
import constant # take user input my_input = input("value="); random_val = float(my_input) # random_val = 0.50; if (random_val> 0.50): print(constant.HEAD) else: print(constant.TAIL)
Step 6: Instead of getting the random value from the user, get it by calling seed() and random() from the Python random module.
import constant import random random.seed(10) print(random.random()) random_val = random.random(); if (random_val> 0.50): print(constant.HEAD) else: print(constant.TAIL)
Step 7: Improve the “randomness” by using the current timestamp as “seed”. The coin flip should now be fair.
import random import constant import time # ts stores the time in seconds ts = time.time() # print the current timestamp print(ts) # use timestamp as random number seed random.seed(ts) # generate pseudo random number random_val = random.random(); # print the generated random number (ranging from 0 to 1) print(random_val); # If the generated random number is larger than 0.5, it's a head # else it's a tail if (random_val> 0.50): print(constant.HEAD) else: print(constant.TAIL)
Step 8: Add the for loop, so that the coin is flipped 10 times in a roll
import random import constant import time for i in range(10): # ts stores the time in seconds ts = time.time() # use timestamp as random number seed random.seed(ts) # generate pseudo random number random_val = random.random(); # If the generated random number is larger than 0.5, it's a head # else it's a tail if (random_val> 0.50): print(constant.HEAD) else: print(constant.TAIL)
Step 9: Keep a tally of how many heads and tails are there after 10 coin flips
import random import constant import time num_heads = 0 num_tails = 0 for i in range(10): # ts stores the time in seconds ts = time.time() # use timestamp as random number seed random.seed(ts) # generate pseudo random number random_val = random.random(); # If the generated random number is larger than 0.5, it's a head # else it's a tail if (random_val> 0.50): print(constant.HEAD) num_heads += 1; else: print(constant.TAIL) num_tails += 1; # print ( "number of heads=" + num_heads) # print ( "number of tails=" + num_tails) print ( "number of heads=" + str(num_heads)) print ( "number of tails=" + str(num_tails))
Step 10: Ask the user to enter the number of coin flips (instead of hard-coded it to 10)
import random import constant import time num_flips = input("Please Ener Number of Flips= "); num_flips = int(num_flips) num_heads = 0 num_tails = 0 for i in range(num_flips): # ts stores the time in seconds ts = time.time() # use timestamp as random number seed random.seed(ts) # generate pseudo random number random_val = random.random(); # If the generated random number is larger than 0.5, it's a head # else it's a tail if (random_val> 0.50): print(constant.HEAD) num_heads += 1; else: print(constant.TAIL) num_tails += 1; print ( "number of heads=" + str(num_heads)) print ( "number of tails=" + str(num_tails))
Step 11: Beautifyl the result output
import random import constant import time num_flips = input("Please Ener Number of Flips= "); num_flips = int(num_flips) num_heads = 0 num_tails = 0 for i in range(num_flips): # ts stores the time in seconds ts = time.time() # use timestamp as random number seed random.seed(ts) # generate pseudo random number random_val = random.random(); # If the generated random number is larger than 0.5, it's a head # else it's a tail if (random_val> 0.50): print(constant.HEAD) num_heads += 1; else: print(constant.TAIL) num_tails += 1; #Report 1: working print ( "number of heads=" + str(num_heads)) print ( "number of tails=" + str(num_tails)) # Report 2: cleaner print ( "number of heads=%3d" %( num_heads)) print ( "number of tails=%3d" %( num_tails)) # Report 3: cleanest print ("number of %s = %i" % (constant.HEAD, num_heads)); print ("number of %s = %i" % (constant.TAIL, num_tails));
You can find the source code for this lesson at https://github.com/jess1sd/coinflip
To learn more:
- Create/Clone the coinflip project locally
- Checkout https://www.codecademy.com/courses/learn-python-3 and review the concepts we have gone over today
- Update the Coin Flip game so that it asks for “guess”, and if the guess matches the result, it’s a Win. Bonus (to get PlayStation swags
- Build a Dice Throwing game based on the Coin Flip
- Checkout PyGame site https://www.pygame.org/news and build a simple game to share