Did you know? Programmers convert coffee to code.

If you like my articles, sponsor me a coffee.

Guess the number — the first approach

Now let’s write a script which implements a basic “Guess the number” game. The rules of the game are:

  • The user selects if he/she wants to guess a number between 1 and 100 or 1 and 1000
  • Based on the number-range the user has a fixed number of guesses
  • The application generates a number to guess
  • The user enters a number
    • if it is the secret number the application congratulates the user and ask if he/she wants to play another round or not
    • else the application tells the user if the secret number is less or greater than the number provided
    • the guess count is increased
  • if the user used up all guesses then the application tells him/her the secret number and asks if the user wants to play another round or not

As you can see, the rules are simple but seem complicated to implement. It is up to you how you want to handle wrong input types (no numbers).

This article is an excerpt of my book Python 3 in Anger. For a more detailed version take a look at the book.

Well, it is not as difficult as it sounds. Let’s see some example output of my solution:

Should the secret number between 1 and 100 or 1 and 1000? 100
You have chosen 100, you will have 7 guesses to find the secret number.
I have chosen the secret number...
What's your guess? 34
The secret number is higher...
What's your guess? 54
The secret number is higher...
What's your guess? 66
Congrats, you have Won!
The secret number was  66
Do you want to play another round? (yes / no) yes
Should the secret number between 1 and 100 or 1 and 1000? 1000
You have chosen 1000, you will have 10 guesses to find the secret number.
I have chosen the secret number...
What's your guess? 500
The secret number is lower...
What's your guess? 400
The secret number is lower...
What's your guess? 300
The secret number is higher...
What's your guess? 350
The secret number is higher...
What's your guess? 375
The secret number is lower...
What's your guess? 370
The secret number is lower...
What's your guess? 360
The secret number is higher...
What's your guess? 365
The secret number is lower...
What's your guess? 364
The secret number is lower...
What's your guess? 363
The secret number is lower...
Sorry, you lose.
The secret number was  362
Do you want to play another round? (yes / no) no

As you can see the application does not stop when the guesses run out and it displays a message if the user won or lost.

Let’s look at the code.

__author__ = 'GHajba'

import random

while True:
    while True:
        try:
            max_number = int(input('Should the secret number between 1 and 100 or 1 and 1000? '))
        except ValueError:
            print("This was not a number!")
            continue
        if max_number != 100 and max_number != 1000:
            continue
        else:
            break

    if max_number == 100:
        guess_count = 7
    else:
        guess_count = 10


    print('You have chosen {}, you will have {} guesses to find the secret number.'.format(max_number, guess_count))

    secret_number = random.randint(1, max_number)

    print('I have chosen the secret number...')

    guesses = 0

    while guess_count - guesses:
        try:
            guesses += 1
            guessed = int(input("What's your guess? "))
        except ValueError:
            continue
        if guessed == secret_number:
            print('Congrats, you have Won!')
            break
        elif guessed > secret_number:
            print('The secret number is lower...')
        else:
            print('The secret number is higher...')
    else:
        print("Sorry, you lose.")

    print("The secret number was ", secret_number)
    answer = ''
    while answer.lower() not in ['yes', 'no', 'y', 'n']:
        answer = input("Do you want to play another round? (yes / no) ")

    if 'no' == answer or 'n' == answer:
        break

As you can see, the code is quite heavy because we include a lot of loops to verify the input and to handle the main game loop. And perhaps you will find this code later not readable at all. To solve this problem we will learn about functions and then we will refactor this piece of code to use functions.

However there are some alternative solutions to this script too. For example you can change the while loop in the middle to a for loop:

for guesses in range(guess_count):

In this case the loop iterates through the range of guesses and ends if the last number is reached.

GHajba
 

Senior developer, consultant, author, mentor, apprentice.

I love to share my knowledge and insights what I achieve through my daily work which is not trivial — at least not for me.

Click Here to Leave a Comment Below 0 comments
%d bloggers like this: