I spent the last weekend compiling a list of games you can code in Python. But why? If you're a beginner Python programmer, building fun games will help you learn the language faster—and better—without getting bogged down in the syntax and the like. I built some of these games when I was learning Python; I quite enjoyed the process! The first game you can code—and the simplest of them all—is a number guessing game (or Guess the Number!). So I thought I'd write a step-by-step tutorial to code this game—and help beginners learn some of the fundamentals along the way. Let's begin!
In a number guessing game, the user guesses a randomly generated secret number within a given number of attempts. After each guess, the user gets hints on whether their guess is too high, too low, or correct. So yeah, the game ends when the user guesses the secret number or runs out of attempts.
Let's start by importing the built-in random module. The random module has functions we can use to generate a random secret number within the specified range:
import random
Enter fullscreen mode
Exit fullscreen mode
Note: The random module gives pseudo-random numbers—and not truly random numbers. So don't use it for sensitive applications such as password generation.
Next, we need to decide on the range for the secret number and the maximum number of attempts allowed for the player. For this tutorial, let's set the lower_bound and upper_bound to 1 and 1000, respectively. Also, set the maximum attempts allowed max_attempts to 10:
lower_bound = 1 upper_bound = 1000 max_attempts = 10
Enter fullscreen mode
Exit fullscreen mode
Now, let's generate a random number within the specified range using the random.randint() function. This is the secret number that the user needs to guess:
secret_number = random.randint(lower_bound, upper_bound)
Enter fullscreen mode
Exit fullscreen mode
To get input from the user, let's create a function called get_guess() . Remember, the user can enter an invalid input: a number outside the range [lower_bound, upper_bound] , a string or a floating point number, and more. We handle this in the get_guess() function that continuously prompts the user to enter a number—within the specified range—until they provide a valid input. Here, we use a while loop to prompt the user for a valid input until they enter an integer between lower_bound and upper_bound :
def get_guess(): while True: try: guess = int(input(f"Guess a number between lower_bound> and upper_bound>: ")) if lower_bound guess upper_bound: return guess else: print("Invalid input. Please enter a number within the specified range.") except ValueError: print("Invalid input. Please enter a valid number.")
Enter fullscreen mode
Exit fullscreen mode
Next, let's define a check_guess() function that takes the user's guess and the secret number as inputs and provides feedback on whether the guess is correct, too high, or too low. The function compares the player's guess with the secret number and returns a corresponding message:
def check_guess(guess, secret_number): if guess == secret_number: return "Correct" elif guess secret_number: return "Too low" else: return "Too high"
Enter fullscreen mode
Exit fullscreen mode
Here's the play_game() function:
def play_game(): attempts = 0 won = False while attempts max_attempts: attempts += 1 guess = get_guess() result = check_guess(guess, secret_number) if result == "Correct": print(f"Congratulations! You guessed the secret number secret_number> in attempts> attempts.") won = True break else: print(f"result>. Try again!") if not won: print(f"Sorry, you ran out of attempts! The secret number is secret_number>.")
Enter fullscreen mode
Exit fullscreen mode
Finally, you can call the play_game() function every time the Python script is run:
if __name__ == "__main__": print("Welcome to the Number Guessing Game!") play_game()
Enter fullscreen mode
Exit fullscreen mode
Now our Python script looks like so:
# main.py import random # define range and max_attempts lower_bound = 1 upper_bound = 1000 max_attempts = 10 # generate the secret number secret_number = random.randint(lower_bound, upper_bound) # Get the user's guess def get_guess(): while True: try: guess = int(input(f"Guess a number between lower_bound> and upper_bound>: ")) if lower_bound guess upper_bound: return guess else: print("Invalid input. Please enter a number within the specified range.") except ValueError: print("Invalid input. Please enter a valid number.") # Validate guess def check_guess(guess, secret_number): if guess == secret_number: return "Correct" elif guess secret_number: return "Too low" else: return "Too high" # track the number of attempts, detect if the game is over def play_game(): attempts = 0 won = False while attempts max_attempts: attempts += 1 guess = get_guess() result = check_guess(guess, secret_number) if result == "Correct": print(f"Congratulations! You guessed the secret number secret_number> in attempts> attempts.") won = True break else: print(f"result>. Try again!") if not won: print(f"Sorry, you ran out of attempts! The secret number is secret_number>.") if __name__ == "__main__": print("Welcome to the Number Guessing Game!") play_game()
Enter fullscreen mode
Exit fullscreen mode
Here's the output from a sample run of the script:
Welcome to the Number Guessing Game! Guess a number between 1 and 1000: 500 Too low. Try again! Guess a number between 1 and 1000: 750 Too high. Try again! Guess a number between 1 and 1000: 625 Too low. Try again! Guess a number between 1 and 1000: 685 Too low. Try again! Guess a number between 1 and 1000: 710 Too low. Try again! Guess a number between 1 and 1000: 730 Congratulations! You guessed the secret number 730 in 6 attempts.
Enter fullscreen mode
Exit fullscreen mode
Congratulations! You've successfully built a number guessing game in Python. I'll see you all soon in another tutorial. But don't wait for me. Check out other games you can build—features you can code—and start coding!