Skip to content

About

Консольная игра «Угадай число» на Python: валидация ввода, счётчик побед, подсказки, автотесты. Для «Талант НТО».

Topics

Resources

Stars

4 stars

Watchers

0 watching

Forks

Latest commit

 

History

11 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Угадай число (Number Guessing Game)

Консольная игра на Python: игрок угадывает загаданное компьютером число за ограниченное количество попыток. Проект демонстрирует чистую архитектуру, валидацию ввода, модульное тестирование и готовность к расширению. Создан для участия в конкурсе «Талант НТО» (номинация «Программирование»).


Цели проекта

  • Реализовать классическую игру «Угадай число» с понятной игровой механикой.
  • Показать навыки структурного программирования: разделение на функции, отсутствие «спагетти-кода».
  • Продемонстрировать обработку пользовательского ввода и граничных случаев.
  • Внедрить автотесты с unittest и unittest.mock для проверки логики и интерактивных частей.
  • Сделать код тестируемым и расширяемым (например, для добавления уровней сложности).

Возможности

  • Диапазон чисел: от 1 до 100 (настраивается в коде).
  • Лимит попыток: 12 (настраивается в коде).
  • Подсказки: «больше» / «меньше» после каждой неверной попытки.
  • Валидация ввода: принимаются только целые числа в заданном диапазоне.
  • Статистика: счёт побед и поражений в рамках одной сессии.
  • Возможность повторного запуска без перезапуска программы.
  • Тестируемость: логика вынесена в чистые функции; есть автотесты, включая моки input.

Технологии и инструменты

  • Язык: Python 3
  • Тестирование: unittest, unittest.mock
  • Консоль: стандартный ввод/вывод (input, print)
  • Генерация чисел: random.randint

Структура проекта

  • guess_number.py # основная логика игры
  • test_guess_number.py # автотесты
  • .gitignore # игнорирование служебных файлов
  • README.md # этот файл

Запуск

python guess_number.py

Как запустить тесты

python -m unittest test_guess_number.py

Особенности реализации

-Чистые функции. Логика проверки ввода, генерации числа и игровой раунд вынесены в отдельные функции без глобального состояния — это упрощает тестирование. -Валидация диапазона. Функция get_number не принимает числа вне [low, high], что защищает от некорректных данных. -Тестируемость интерактивности. Для тестирования input используется unittest.mock.patch — стандартный подход для консольных приложений. -Детерминированность для тестов. Функция pick_secret поддерживает параметр fixed, позволяющий задать конкретное число для воспроизводимых тестов. -Граничные случаи. В тестах покрыты: выигрыш с первой попытки, проигрыш по исчерпанию попыток, ввод некорректных значений, работа с фиксированным секретом.

Пример игрового процесса

======================================== ИГРА «УГАДАЙ ЧИСЛО»

Компьютер загадывает число — вы отгадываете. Подсказки: «больше» — нужно число побольше, «меньше» — поменьше. Удачи!

Я загадала число от 1 до 100. Попыток осталось: 12

Попытка 1: 50 Загаданное число меньше. Осталось попыток: 11

Попытка 2: 25 Загаданное число больше. Осталось попыток: 10

Попытка 3: 37 Верно! Число было 37. Вы угадали за 3 попыток.

Счёт — побед: 1, поражений: 0

Сыграем ещё? (да / нет): нет

Спасибо за игру! До встречи.

Планы развития

-Добавить уровни сложности (лёгкий/средний/сложный) с разными диапазонами и количеством попыток.

-Вынести настройки в отдельный конфигурационный файл или аргументы командной строки.

-Добавить таблицу рекордов (сохранение в JSON/CSV).

-Расширить покрытие тестами (включая негативные сценарии и длинные сессии).

About

Консольная игра «Угадай число» на Python: валидация ввода, счётчик побед, подсказки, автотесты. Для «Талант НТО».

Topics

Resources

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages