(close)

Use this link to get 70% off the Automate the Boring Stuff online video course.

Support me on Patreon

Prev: Four in a Row | Next: Gullible
Use this link to get 70% off the Automate the Boring Stuff online video course.

Support me on Patreon

Guess the Number

Guess the Number is a classic game for beginners to practice basic programming techniques. In this game, the computer thinks of a random number between 1 and 100. The player has 10 chances to guess the number. After each guess, the computer tells the player if it was too high or too low.

When you run *guess.py*, the output will look like this:

```
Guess the Number, by Al Sweigart [email protected]
I am thinking of a number between 1 and 100.
You have 10 guesses left. Take a guess.
>
```**50**
Your guess is too high.
You have 9 guesses left. Take a guess.
> **25**
Your guess is too low.
`--snip--`
You have 5 guesses left. Take a guess.
> **42**
Yay! You guessed my number!

Guess the Number uses several basic programming concepts: loops, if-else statements, functions, method calls, and random numbers. Python’s `random`

module generates pseudorandom numbers—numbers that look random but are technically predictable. Pseudorandom numbers are easier for computers to generate than truly random numbers, and they’re considered “random enough” for applications such as video games and some scientific simulations.

Python’s `random`

module produces pseudorandom numbers from a seed value, and each stream of pseudorandom numbers generated from the same seed will be the same. For example, enter the following into the interactive shell:

`>>> `**import random**
>>> **random.seed(42)**
>>> **random.randint(1, 10); random.randint(1, 10); random.randint(1, 10)**
2
1
5

If you restart the interactive shell and run this code again, it produces the same pseudorandom numbers: `2`

, `1`

, `5`

. The video game *Minecraft* generates its pseudorandom virtual worlds from a starting seed value, which is why different players can re-create the same world by using the same seed.

```
1. """Guess the Number, by Al Sweigart [email protected]
2. Try to guess the secret number based on hints.
3. This code is available at https://nostarch.com/big-book-small-python-programming
4. Tags: tiny, beginner, game"""
5.
6. import random
7.
8.
9. def askForGuess():
10. while True:
11. guess = input('> ') # Enter the guess.
12.
13. if guess.isdecimal():
14. return int(guess) # Convert string guess to an integer.
15. print('Please enter a number between 1 and 100.')
16.
17.
18. print('Guess the Number, by Al Sweigart [email protected]')
19. print()
20. secretNumber = random.randint(1, 100) # Select a random number.
21. print('I am thinking of a number between 1 and 100.')
22.
23. for i in range(10): # Give the player 10 guesses.
24. print('You have {} guesses left. Take a guess.'.format(10 - i))
25.
26. guess = askForGuess()
27. if guess == secretNumber:
28. break # Break out of the for loop if the guess is correct.
29.
30. # Offer a hint:
31. if guess < secretNumber:
32. print('Your guess is too low.')
33. if guess > secretNumber:
34. print('Your guess is too high.')
35.
36. # Reveal the results:
37. if guess == secretNumber:
38. print('Yay! You guessed my number!')
39. else:
40. print('Game over. The number I was thinking of was', secretNumber)
```

After entering the source code and running it a few times, try making experimental changes to it. On your own, you can also try to figure out how to do the following:

- Create a “Guess the Letter” variant that gives hints based on the alphabetical order of the player’s guess.
- Make the hints after each guess say “warmer” or “colder” based on the player’s previous guess.

Try to find the answers to the following questions. Experiment with some modifications to the code and rerun the program to see what effect the changes have.

- What happens if you change
`input('> ')`

on line 11 to`input(secretNumber)`

? - What error message do you get if you change
`return int(guess)`

on line 14 to`return guess`

? - What happens if you change
`random.randint(1, 100)`

on line 20 to`random.randint(1, 1)`

? - What happens if you change
`format(10 - i)`

on line 24 to`format(i)`

? - What error message do you get if you change
`guess == secretNumber`

on line 37 to`guess = secretNumber`

?