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

Угадай число на Python — пошаговое руководство

• 4 min read • Python • Обновлено 24 Nov 2025
Угадай число на Python — руководство
Угадай число на Python — руководство

Группа монет с числами

Что включает этот пример

  • Полный рабочий скрипт на Python, который можно сразу запустить.
  • Выбор уровня сложности (easy, medium, hard).
  • Ограничение количества попыток и динамический диапазон чисел для угадывания.
  • Подсказки: выше/ниже и «теплее/холоднее» по расстоянию от ответа.
  • Список тестов, критерии приёмки и советы для обучения.

Зачем делать игру «Угадай число»

Создание простой игры — отличный способ закрепить базовые понятия программирования: переменные, ввод/вывод, условные операторы, циклы, обработка исключений и модульность кода. Игра лёгка в расширении: можно добавить логирование, GUI или сетевой режим позже.

Мини-терминология

  • randint(a, b): функция из модуля random, возвращающая случайное целое в диапазоне [a, b].
  • guess: число, введённое игроком.
  • answer: случайное число, которое нужно угадать.

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

Сохраните в файл number-guessing-game.py и запустите через python number-guessing-game.py.

# number-guessing-game.py
import random
import sys

def choose_level():
    print("Выберите уровень сложности: easy, medium, hard")
    while True:
        level = input("Уровень: ").strip().lower()
        if level in ("easy", "medium", "hard"):
            return level
        print("Неверный ввод. Введите: easy, medium или hard.")

def settings_by_level(level):
    if level == "easy":
        return 50, 20  # диапазон, попытки
    elif level == "medium":
        return 100, 15
    else:
        return 150, 10

def get_guess(prompt, min_v, max_v):
    while True:
        try:
            val = input(prompt)
            guess = int(val)
            if guess < min_v or guess > max_v:
                print(f"Введите число от {min_v} до {max_v}.")
                continue
            return guess
        except ValueError:
            print("Пожалуйста, введите целое число.")

def hint_distance(guess, answer):
    d = abs(guess - answer)
    if d == 0:
        return None
    if d <= 5:
        return "Очень близко"
    if d <= 10:
        return "Теплее"
    if d <= 20:
        return "Тепло"
    if d <= 30:
        return "Прохладно"
    return "Холодно"

def play():
    print("Добро пожаловать в игру 'Угадай число'!")
    level = choose_level()
    guess_range, guesses_allowed = settings_by_level(level)
    answer = random.randint(1, guess_range)

    print(f"Угадайте число от 1 до {guess_range}. У вас {guesses_allowed} попыток.")

    for i in range(guesses_allowed):
        prompt = f"Попытка {i+1}/{guesses_allowed}. Введите число: "
        guess = get_guess(prompt, 1, guess_range)

        if guess == answer:
            print("Поздравляем! Вы угадали число. Вы победили!")
            return True
        elif guess < answer:
            print("Задуманное число больше.")
        else:
            print("Задуманное число меньше.")

        distance_hint = hint_distance(guess, answer)
        if distance_hint:
            print(distance_hint)

        if i == guesses_allowed - 1:
            print(f"К сожалению, попытки закончились. Загаданное число было {answer}.")
            return False

if __name__ == '__main__':
    try:
        play()
    except KeyboardInterrupt:
        print("\nИгра прервана пользователем.")
        sys.exit(0)

Important: Этот скрипт обрабатывает ошибочные вводы и прерывание пользователем (Ctrl+C).

Разбор логики по шагам

  • Импортируем random и sys.
  • Просим игрока выбрать уровень — функция choose_level возвращает строку уровня.
  • settings_by_level устанавливает размеры диапазона и число попыток.
  • Генерируем ответ: random.randint(1, guess_range).
  • Основной цикл for выполняется ограниченное число попыток.
  • Для ввода используем get_guess с валидацией и проверкой диапазона.
  • После каждой попытки даём подсказку выше/ниже и оценку близости по абсолютной разнице.

Как добавить дополнительные функции (варианты расширения)

  • Сохранение статистики игрока в файл (победы/поражения, число попыток).
  • Режим без подсказок (чтобы усложнить игру).
  • Интеллектуальные подсказки: подсказать деление диапазона пополам (подсказка как в бинарном поиске).
  • Графический интерфейс с помощью tkinter или веб-версия на Flask.

Альтернативные подходы

  • Вместо циклов for/while можно реализовать рекурсивную логику, но это менее очевидно в простом скрипте.
  • Для генерации случайных чисел использовать secrets.randbelow для криптографической стойкости (обычно не нужен для игры).

Когда подход может не сработать

  • Если цель — многопользовательская игра с учётом рейтинга, одной консольной версии будет недостаточно.
  • Для мобильных приложений нужна адаптация интерфейса и другой стек технологий.

Критерии приёмки

  • Скрипт запускается командой python number-guessing-game.py (или python3 на некоторых системах).
  • При некорректном вводе не происходит падения — выводится сообщение об ошибке.
  • При угадывании игрока выводится сообщение о победе, и программа завершает игру.
  • При исчерпании попыток игроку показывается загаданное число.
  • Выбор уровня корректно меняет диапазон и число попыток.

Тестовые сценарии

  1. Функциональный тест: уровень easy, вручную задать число, проверить поведение при угадывании.
  2. Ввод нечисловых данных: ввести “abc” — программа должна попросить ввести целое.
  3. Границы диапазона: ввести 0 или число больше максимума — программа должна напомнить о допустимом диапазоне.
  4. Прерывание: нажать Ctrl+C — программа должна корректно завершиться.

Чек-лист для ролей

  • Разработчик:
    • Реализовал валидацию ввода.
    • Добавил обработку KeyboardInterrupt.
    • Написал комментарии в коде.
  • Тестер:
    • Прогоны по всем уровням сложности.
    • Тесты на неверный ввод и на граничные значения.
  • Ученик:
    • Понял структуру цикла и условных операторов.
    • Попробовал изменить диапазон и подсказки.

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

  • Разбей задачу: ввод → проверка → ответ → подсказка.
  • Для подсказок «теплее/холоднее» используйте абсолютную разницу; чем меньше, тем ближе.
  • Ограничение попыток превращает поиск в задачу оптимизации — думайте, как сократить диапазон быстрее.

Факты и числа по умолчанию

  • Диапазоны по уровню: easy=1–50, medium=1–100, hard=1–150.
  • Попытки по уровню: easy=20, medium=15, hard=10.

Советы по локализации и UX для русскоязычных пользователей

  • Языковые подсказки в интерфейсе должны быть короткими и понятными.
  • При локализации сообщений используйте нейтральную формулировку (без сленга).

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

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

Рекомендации по запуску

  • Windows: в командной строке или PowerShell выполните:
cd C:\путь\к\папке
python number-guessing-game.py
  • macOS / Linux:
cd /путь/к/папке
python3 number-guessing-game.py

Краткое руководство по расширению проекта

  • Добавьте логирование в JSON для последующего анализа:
    • Сохраняйте уровень, число попыток, итог (win/lose), время игры.
  • Введите режим «двух игроков»: первый игрок задаёт число, второй угадывает.
  • Сделайте веб-интерфейс на Flask: форма для ввода, отображение подсказок и истории.

Заключение

Создание и улучшение игры «Угадай число» — отличный путь к освоению основ Python. Начните с этого консольного примера, затем итеративно добавляйте функции: сохранение статистики, GUI, сетевые режимы. Экспериментируйте с подсказками и алгоритмами, чтобы превратить учебный проект в полнофункциональное приложение.

Краткая инструкция для публикации на GitHub:

  1. Создайте репозиторий.
  2. Добавьте файл number-guessing-game.py.
  3. Напишите README с примерами запуска и кратким описанием уровней.

Notes: идеально использовать этот проект как базу для изучения тестирования (юнит-тесты для функций валидации и подсказок) и для изучения работы с файлами/логированием.

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

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

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро