Отладка логических ошибок
Программа может выполняться без единой ошибки — и всё равно давать неверный результат. Учимся находить такие ошибки методично.
Логическая ошибка — это не ошибка Python
Программа if age > 18: выполняется прекрасно и не выдаёт
никакой ошибки. Но если по условию задачи «доступ с 18 лет включительно», это —
логическая ошибка: Python не может знать, что вы имели в виду.
| Тип ошибки | Что происходит | Пример |
|---|---|---|
| SyntaxError | Python не может даже начать выполнение кода | if age >= 18 (забыто двоеточие) |
| Runtime-ошибка | программа стартует, но падает на середине | age_text + 5 (str + int) |
| Логическая ошибка | программа выполняется успешно, но результат неверный | if age > 18 вместо >= |
Метод отладки условий
Когда результат условия кажется неправильным, не гадайте — выведите промежуточные значения:
age = 20
has_ticket = False
eligible = age >= 18 and has_ticket
print("age >= 18:", age >= 18)
print("has_ticket:", has_ticket)
print("eligible:", eligible)
# age >= 18: True
# has_ticket: False
# eligible: False
Разбив сложное условие на части и выведя каждую отдельно, сразу видно, ЧТО именно сделало итог ложным.
Называйте логические переменные осмысленно
| Хорошее имя | Плохое имя |
|---|---|
is_ready | flag1 |
has_ticket | thing |
can_enter | value2 |
needs_update | x |
Приставки is_, has_,
can_, needs_ — не обязательный
синтаксис, а полезное соглашение: сразу видно, что переменная хранит
True/False.
Сохраняйте сложное условие в переменную
can_enter = age >= 18 and has_ticket
if can_enter:
print("Проходите")
can_enter читается сразу — не нужно заново разбирать
выражение age >= 18 and has_ticket каждый раз, когда вы
возвращаетесь к этому коду.
status = "adult" if age >= 18 else "minor". Это не замена обычному if/else — только удобство для одной строки.match/case для некоторых многовариантных ситуаций. Мы изучим его подробно позже — сейчас достаточно знать, что оно существует.