Гид по технологиям

Игра «Угадай число» на Python

5 min read Python Обновлено 02 Jan 2026
Угадай число на Python — руководство для начинающих
Угадай число на Python — руководство для начинающих

Стопка металлических монет с напечатанными числами

Кому это полезно

  • Новичкам, которые изучают основы Python: ввод/вывод, циклы, условия, работа с модулями.
  • Учителям и наставникам, которые хотят объяснить основы игрового цикла и тестирования.
  • Разработчикам, которые хотят расширить простую CLI-игру и добавить подсказки или уровни сложности.

Краткое описание идеи

Игра генерирует случайное число в заданном диапазоне. Игрок пытается угадать его за ограниченное число попыток. Варианты улучшений: подсказки выше/ниже, индикатор «теплее/холоднее», выбор уровня сложности, подсчёт очков и сохранение результатов.

Что понадобится

  • Установленный Python 3.6+.
  • Любой текстовый редактор или IDE (например, VS Code).
  • Командная строка / терминал для запуска скрипта.

Полный пример скрипта

Ниже — рабочий пример, объединяющий все рассмотренные функции: выбор сложности, ограничение попыток, подсказки “выше/ниже” и “теплее/холоднее”. Скопируйте в файл number-guessing-game.py и запустите.

import random

# Настройки по умолчанию
guess_range = 50
guesses_allowed = 10

print("Welcome to the number guessing game!")
print("")

# Выбор сложности
while True:
    level = input("Select difficulty level (easy, medium, hard): ").lower().strip()
    if level in ["easy", "medium", "hard"]:
        break
    else:
        print("Invalid input. Please select either 'easy', 'medium', or 'hard'.")

if level == "easy":
    guess_range = 50
    guesses_allowed = 20
elif level == "medium":
    guess_range = 100
    guesses_allowed = 15
else:
    guess_range = 150
    guesses_allowed = 10

answer = random.randint(1, guess_range)

print(f"I have chosen a number between 1 and {guess_range}. You have {guesses_allowed} guesses.")

previous_guess = None
for i in range(guesses_allowed):
    # Ввод и валидация
    while True:
        user_input = input(f"Guess a number between 1 and {guess_range}: ")
        try:
            guess = int(user_input)
            if 1 <= guess <= guess_range:
                break
            else:
                print(f"Number must be between 1 and {guess_range}.")
        except ValueError:
            print("Please enter a valid integer.")

    # Проверка выигрыша
    if guess == answer:
        print("Congratulations! You guessed the correct number. You win!")
        break

    # Подсказка выше/ниже
    if guess < answer:
        print("The number is higher.")
    else:
        print("The number is lower.")

    # Подсказка теплее/холоднее
    if previous_guess is not None:
        prev_dist = abs(previous_guess - answer)
        curr_dist = abs(guess - answer)
        if curr_dist < prev_dist:
            print("You're getting warmer.")
        elif curr_dist > prev_dist:
            print("You're getting colder.")
        else:
            print("You're at the same distance as before.")
    else:
        # Первая подсказка по расстоянию
        if abs(guess - answer) <= max(1, guess_range // 10):
            print("You're warm!")
        elif abs(guess - answer) <= max(1, guess_range // 5):
            print("You're getting warmer.")
        else:
            print("You're cold.")

    previous_guess = guess

    # Если последний ход
    if i == guesses_allowed - 1:
        print(f"Sorry, you have run out of guesses. The correct number was {answer}.")

Объяснение ключевых частей кода

  • random.randint(a, b): выбирает случайное целое от a до b включительно.
  • Ввод через input() возвращает строку — используем int() для преобразования. Всегда добавляйте обработку ValueError.
  • Цикл for в сочетании с range(guesses_allowed) ограничивает число попыток.
  • Переменная previous_guess используется для сравнения дистанций и выдачи подсказок “теплее/холоднее”.

Как сгенерировать случайное число

  1. Создайте файл number-guessing-game.py.
  2. Импортируйте модуль random: import random.
  3. Используйте randint: answer = random.randint(1, guess_range). Это даёт вам случайное число в включённом диапазоне.

Как проверить, угадал ли игрок

  • Сравнивайте guess и answer.
  • Если равны — игрок выиграл и цикл прерывается командой break.
  • В противном случае продолжайте и давайте подсказки.

Как ограничить число попыток

  • Вариант с переменной guesses_allowed и циклом for гарантирует, что игрок не будет угадывать бесконечно.
  • По окончании цикла можно сообщить верный ответ.

Как добавить подсказки

  • Простая подсказка: сообщите, больше или меньше загаданное число.
  • Дополнительная подсказка: используйте абсолютную разницу abs(guess - answer) для оценки «теплее/холоднее».
  • Хорошая практика: комбинировать оба типа подсказок, но не раскрывать слишком много, чтобы игра оставалась интересной.

Как добавить уровни сложности

  • Предложите игроку выбрать easy, medium или hard.
  • В зависимости от выбора измените диапазон и число попыток. Пример значений:
    • easy: диапазон до 50, попыток 20
    • medium: диапазон до 100, попыток 15
    • hard: диапазон до 150, попыток 10

Полезные улучшения и варианты развития

  1. Сохранение статистики: количество побед/поражений, среднее число попыток — сохранять в JSON или CSV.
  2. Режим обучения: показывать подсказки реже или давать объяснения о стратегиях (двоичный поиск).
  3. GUI: реализовать интерфейс с помощью Tkinter или PySimpleGUI.
  4. Веб-версия: создать простую версию на Flask или FastAPI и открыть доступ через браузер.
  5. Боты: добавить Telegram-бота, который будет вести игру.

Когда такой подход не подойдёт

  • Если вы хотите многопользовательскую игру или сложную логику — лучше использовать игровую движок или базу данных для хранения сессий.
  • Для визуально насыщенных игр CLI будет ограничением — используйте GUI/веб/движок.

Ментальные модели и эвристики

  • Бинарный поиск: если игрок использует стратегию «делить диапазон пополам», он найдет число за O(log2(N)) попыток.
  • Выбор сложности: увеличивая диапазон и уменьшая попытки, вы повышаете риск, но и азарт.

Чеклист перед запуском

  • Установлен Python 3.6+
  • Файл number-guessing-game.py сохранён
  • Присутствует импорт random
  • Есть обработка ошибок для ввода
  • Диапазон и количество попыток корректно заданы

Как запустить игру

  1. Откройте терминал и перейдите в папку с файлом, например:
    cd C:\Users\Sharl\Desktop
  2. Запустите скрипт:
    python number-guessing-game.py
  3. Введите уровень сложности и начинайте угадывать.

Игровой терминал с текстовой игрой на Python

Игровой процесс в терминале: ввод чисел и подсказки

Тестовые случаи и критерии приёмки

  • Корректный ввод целого числа в диапазоне должен принимать значение.
  • Некорректный ввод (текст, дробь) должен вызывать вежливое сообщение об ошибке и повторный запрос.
  • При угадывании до окончания попыток — выводится сообщение о победе и игра завершается.
  • При исчерпании попыток — выводится сообщение о поражении и правильный ответ.
  • Подсказки “выше/ниже” и “теплее/холоднее” меняются в ожидаемом направлении.

Шаблон проверки качества (SLA простого проекта)

  • Время отклика CLI: мгновенно (с учётом ввода пользователя).
  • Корректность случайного числа: значение в указанном диапазоне.
  • Достоверность подсказок: проверяется на наборе ручных тестов из 10 сценариев.

Отладка и распространённые проблемы

  • Ошибка ValueError при int(user_input): добавить try/except и проверить пустые строки.
  • Попадание числа вне диапазона: проверяйте 1 <= guess <= guess_range и выводите подсказку.
  • Неправильный подсчёт попыток: если используете while, следите за инкрементом счётчика.

Мини-методология обучения через проект

  1. Определите минимально работоспособную версию (MVP): выбор числа и сравнение с вводом.
  2. Добавьте ограничение попыток.
  3. Добавьте подсказки выше/ниже.
  4. Добавьте выбор сложности.
  5. Добавьте тесты и сбор статистики.

Роли и задачи

  • Ученик: реализовать MVP и пройти чеклист.
  • Наставник: проверить тесты и объяснить бинарный поиск.
  • Разработчик: написать модульные тесты и добавить сохранение результатов.

Короткая дорожная карта развития проекта

  1. CLI версия (текущая).
  2. Сохранение статистики в файле.
  3. GUI через Tkinter.
  4. Веб-интерфейс с авторизацией и таблицей лидеров.

Безопасность и приватность

  • Игра не собирает персональные данные по умолчанию.
  • Если добавляете онлайн-режим и храните данные пользователей, соблюдайте правила хранения и GDPR — храните только необходимые поля и шифруйте соединение.

Вопросы и ответы

Как сделать подсказки менее прямыми?

Можно ограничить число подсказок, например давать подсказку “выше/ниже” только каждые две попытки или только первые N ошибок.

Можно ли сохранять рекорды игроков?

Да. Используйте JSON или CSV для локального хранения. Для многопользовательского доступа лучше базу данных.

Краткое резюме

  • Создание игры «Угадай число» — отличный проект для изучения основ Python.
  • Главные элементы: генерация случайного числа, цикл ввода, обработка ошибок, логика подсказок, ограничение попыток.
  • Проект легко расширяется: GUI, веб, статистика и боты.

Важно: экспериментируйте с разными стратегиями и цените обратную связь от игроков — это лучший способ улучшить игру.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Перенос музыки между Echo-устройствами через Alexa
Умный дом

Перенос музыки между Echo-устройствами через Alexa

Как добавить второй язык в Google Home
Умный дом

Как добавить второй язык в Google Home

Как смотреть Netflix на Amazon Echo Show
How-to

Как смотреть Netflix на Amazon Echo Show

Adaptive Volume в Alexa — включение и советы
Умный дом

Adaptive Volume в Alexa — включение и советы

Безопасность подержанных устройств умного дома
Безопасность

Безопасность подержанных устройств умного дома

Super Alexa Mode: скрытый режим на Echo
Гаджеты

Super Alexa Mode: скрытый режим на Echo