Мини-проект — игра «Угадай число»
Первая настоящая игра книги — компьютер загадывает число, вы пытаетесь угадать.
Первая настоящая игра в этой книге! Компьютер загадывает число, вы вводите один вариант — программа говорит, угадали вы или нет.
Сначала — как это выглядит для игрока
Я загадал число от 1 до 10.
Ваш вариант: 7
Слишком большое!
Я загадал: 4
Или, если угадали с первой попытки:
Я загадал число от 1 до 10.
Ваш вариант: 4
🎉 Вы угадали!
Решающее дерево игры
if guess == secret:
print("🎉 Вы угадали!")
elif guess < secret:
print("Слишком мало!")
else:
print("Слишком много!")
Строим игру по шагам
Шаг 1 — загадываем число
import random
secret = random.randint(1, 10)
Шаг 2 — читаем ответ игрока
guess_text = input("Ваш вариант: ")
Шаг 3 — преобразуем в число
guess = int(guess_text)
guess_text < secret напрямую (строку с числом), Python выдаст TypeError — сравнивать строку и число нельзя. Преобразование int() обязательно.Шаг 4 — проверяем точное совпадение
if guess == secret:
print("🎉 Вы угадали!")
Шаг 5 — добавляем «слишком мало»
if guess == secret:
print("🎉 Вы угадали!")
elif guess < secret:
print("Слишком мало!")
Шаг 6 — else означает «слишком много»
if guess == secret:
print("🎉 Вы угадали!")
elif guess < secret:
print("Слишком мало!")
else:
print("Слишком много!")
Шаг 7 — финальная версия
import random
secret = random.randint(1, 10)
guess = int(input("Ваш вариант: "))
if guess == secret:
print("🎉 Вы угадали!")
elif guess < secret:
print("Слишком мало!")
else:
print("Слишком много!")
print(f"Загаданное число было: {secret}")
random.randint(...), чтобы вывод был предсказуем при показе. В настоящей игре это не нужно — случайность там как раз то, что делает игру интересной.Debug-лаборатория: пять багов
Баг 1 — забыт int()
guess = input("Ваш вариант: ")
if guess < secret:
...
# TypeError: '<' not supported between instances of 'str' and 'int'
Исправление: guess = int(input(...)).
Баг 2 — неверный порядок веток
if guess < secret:
...
elif guess == secret:
...
Само по себе не сломается, но порядок «сначала неточные, потом точное» менее логичен — сравните с шагами 4-6 выше.
Баг 3 — = вместо ==
if guess = secret:
...
# SyntaxError: invalid syntax
Одиночный = в условии — синтаксическая ошибка, Python даже
не запустит программу (раздел 9.5).
Баг 4 — неверная граница
secret = random.randint(1, 10)
# но подсказка написана как "от 1 до 9" — граница не совпадает с кодом
Баг 5 — два независимых if вместо elif
if guess < secret:
print("Слишком мало!")
if guess > secret:
print("Слишком много!")
# при guess == secret НИ ОДНО сообщение не покажется — а if/elif/else это учитывает
Добавьте четвёртое условие: если разница между guess и secret меньше 3 (используйте abs()) — выведите «Очень близко!» перед основным сообщением.