Guessing Game

We are going to create a simple guessing game.

  • We will choose a random number between 1 and 100

  • We will ask the user to guess that number

  • If their guess is too high/low, we tell them that and let them try again

  • When they succeed, we say “Yay”

Breaking Down the Problem (Pseudocode)

What are the steps we are going to take:

# create a random number
# loop until success
    # get user's number as integer
    # compare with the number
        # print out guidance

Code Walk Through

Here’s what the final script might look like:

import random
number = random.randint( 1, 100 )

success = False # we haven't yet succeeded
while not success:
    
    guess = raw_input('What is your guess? ')
    guess = int(guess) # guess was a string, now an integer
    
    if guess > number:
        print( "Too high")
    elif guess < number:
        print( "Too low")
    else:
        print( "You rock!" )
    
    success = (guess == number)

Create a Random Number

  • Someone wrote a module that provides functions related to (psuedo)-random numbers

  • The module is called random

  • There is a function in it called random.randint()

# load the library of code (module) called random
import random
# random is a module full of functions
# one of which is randint()
# we want to *remember* our random integer for later...
number = random.randint(1,100)
  • what does all that mean:

    random.randint # gets a name *inside* the "random" module
    ( ) # sends a *message* to that thing
    1, 100 # passes two parameters as part of that message
    number = # assigns the result of sending the message to a variable
    
  • we are going to define our own functions in our next game: Trivia Game

Exercise: Setup the Game Script

We are going to create a script that will become our game.

  • In Idle or PyScripter create a new file (our script)

    • File | New Window

  • Save the empty script into your home directory (H:)

    • File | Save As

  • In the script type:

    import random
    number = random.randint(1,100)
    print(number)
    
  • Save the script again

  • Run the script with Idle <F5> or PyScripter <F9>

Ask for a Number

  • How do we ask the user for input?

  • Recall that the function for this is called input()

  • It takes an argument that is the prompt you want to present to the user and returns the text (string) they typed

guess = input('What is your guess? ')
# ick, guess is a str, we want an int
guess = int(guess)

Note

If you are using Python 2.x you need to use raw_input() instead of input().

Exercise: Ask for a Number

  • Modify your game to give the user one chance to guess the number

  • Remember to convert their input to an integer

  • print the guess and the number (again, to let us see if it is working)

Review: Ask for a Number

import random
number = random.randint( 1, 100 )

guess = raw_input('What is your guess? ')
guess = int(guess)

print( number,  guess )

Until the User Succeeds

What is success in this game? Success is when the user’s guess is equal to the number.

success = (guess == number)

We want to keep asking until the user succeeds:

while not success:
    ...
    success = (guess==number)
>>> n = 3
>>> while n > 0:
...     print(n)
...     n = n-1
...
3
2
1

Exercise: Loop Until Success

  • Modify your script so that the user is asked to guess until they succeed

Note

Pretty hard, eh? You can stop before you guess the number by hitting <ctrl-c> on the keyboard to interrupt the script.

Review: Loop Until Success

import random
number = random.randint( 1, 100 )

success = False
while not success:

    guess = raw_input('What is your guess? ')
    guess = int(guess)
    
    success = (guess == number)

Give Guidance and Congratulations

  • We want to do something if one of these two cases is True:

    • Guess is too high (> number)

    • Guess is too low (< number)

  • This sounds like an if statement

if <test>:
    do_first_thing()
elif <othertest>:
    do_other_thing()
else:
    do_thing_when_other_tests_false()

Exercise: Give Guidance

  • Modify your game to tell the user when they are too high or too low

Review: Give Guidance

import random
number = random.randint( 1, 100 )

success = False # we haven't yet succeeded
while not success:
    
    guess = raw_input('What is your guess? ')
    guess = int(guess) # guess was a string, now an integer
    
    if guess > number:
        print( "Too high")
    elif guess < number:
        print( "Too low")
    else:
        print( "You rock!" )
    
    success = (guess == number)

Extra Exercises

  • Modify your script to track the number of guesses and report to the user

  • Figure out the best strategy to win the game