Консольная игра на 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.pypython -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).
-Расширить покрытие тестами (включая негативные сценарии и длинные сессии).