Как написать простую игру по угадыванию чисел на Python
Последние выходные я провёл за составлением списка игр, которые можно написать на Python. Но зачем?
Если вы начинающий программист на Python, создание увлекательных игр поможет вам быстрее и лучше освоить язык, не увязнув в синтаксисе и тому подобных вещах. Я создал несколько таких игр, когда изучал Python; мне очень понравился этот процесс!
Первая игра, которую вы можете написать, и самая простая из них - это игра на угадывание чисел (или "Угадай число!"). Поэтому я решил написать пошаговое руководство по кодированию этой игры и помочь новичкам освоить некоторые основы.
Давайте приступим!
Как работает игра "Угадай число"?
В игре "Угадай число" пользователь угадывает случайно сгенерированное секретное число за заданное количество попыток.
После каждой попытки пользователь получает подсказку о том, правильно ли он угадал число, слишком ли велико его предположение или слишком мало. И да, игра заканчивается, когда пользователь угадывает секретное число или заканчивает попытки.
Кодирование игры "Угадай число"
Приступим к кодированию! Создайте новый Python-скрипт и начинайте его написание.
Шаг 1 - Импорт модуля random
Начнем с импорта встроенного модуля random
. Модуль random
содержит функции, которые можно использовать для генерации случайного секретного числа в заданном диапазоне:
import random
Примечание: модуль random
выдает псевдослучайные, а не истинно случайные числа. Поэтому не используйте его для работы с конфиденциальными приложениями, такими как генерация паролей!
Шаг 2 - Настройка диапазона и максимального количества попыток
Далее необходимо определить диапазон секретного номера и максимальное количество попыток, предоставляемых игроку. Для данного руководства установим lower_bound
(нижнюю границу) и upper_bound
(верхнюю границу), 1 и 1000 соответственно. Также установим максимальное количество попыток max_attempts
, равное 10:
lower_bound = 1
upper_bound = 1000
max_attempts = 10
Шаг 3 - Генерация случайного числа
Теперь сгенерируем случайное число в заданном диапазоне с помощью функции random.randint()
. Это и есть секретное число, которое должен угадать пользователь:
secret_number = random.randint(lower_bound, upper_bound)
Шаг 4 - Считывание введённой пользователем информации
Для получения входных данных от пользователя создадим функцию get_guess()
. Напомним, что пользователь может ввести некорректный вариант: число вне диапазона [lower_bound, upper_bound]
, строку или число с плавающей точкой и т.д.
С этим мы справляемся с помощью функции get_guess()
, которая постоянно предлагает пользователю ввести число в заданном диапазоне, пока он не введет правильное значение.
Здесь мы используем цикл while
, который подсказывает пользователю допустимый вариант ввода до тех пор, пока пользователь не введёт целое число между lower_bound
и 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.")
Шаг 5 - Проверка предположения пользователя
Далее зададим функцию check_guess()
, которая принимает секретное число и предположение пользователя в качестве входных данных и выдает информацию о том, является ли предположение правильным, слишком большим или слишком малым.
Функция сравнивает угаданное игроком число с секретным и выводит соответствующее сообщение:
def check_guess(guess, secret_number):
if guess == secret_number:
return "Correct"
elif guess < secret_number:
return "Too low"
else:
return "Too high"
Шаг 6 - Отслеживание количества попыток и определение условий окончания игры
Теперь создадим функцию play_game()
, которая обрабатывает логику игры и собирает всё воедино. Функция использует переменную attempts
для отслеживания количества попыток, сделанных пользователем. С помощью цикла while
пользователю предлагается ввести отгадку, которая обрабатывается функцией get_guess()
.
Вызов функции check_guess()
обеспечивает обратную связь с предположением пользователя:
- Если предположение верно, пользователь выигрывает, и игра заканчивается.
- В противном случае пользователю даётся еще один шанс угадать.
- И так продолжается до тех пор, пока игрок не угадает секретное число или пока не закончатся попытки.
Здесь представлена функция play_game()
:
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}.")
Шаг 7 - Сыграйте в игру!
Наконец, вы можете вызывать функцию play_game() при каждом запуске Python-скрипта:
if __name__ == "__main__":
print("Welcome to the Number Guessing Game!")
play_game()
Соединяем все вместе
Теперь наш Python-скрипт выглядит следующим образом:
# 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()
Вот результат пробного запуска скрипта:
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.
Подведение итогов
Поздравляем! Вы успешно создали игру по угадыванию чисел на Python. Просмотрите наши статьи о создании игр «Камень, ножницы, бумага» и «Игра в слова» и начинайте кодить! Успехов Вам в создании собственных проектов!