Глава 9 · Выполняй мою команду!
Проектируем условие: ввод, валидация, границы
Повторяемый способ подходить к любому условию — от требования до протестированного граничного значения.
Валидация — это не то же самое, что решение
Прежде чем принимать решение по введённым данным, нужно проверить, что данные вообще осмысленны. Это два разных шага:
- Валидация — допустим ли ввод? (например, это вообще число?)
- Решение — что делать с допустимым вводом?
validaciya_i_reshenie.py
age_text = input("Возраст: ").strip()
if age_text.isdigit(): # 1. валидация
age = int(age_text)
if age >= 18: # 2. решение
print("Доступ разрешён")
else:
print("Доступ запрещён")
else:
print("Это не похоже на число")
Полноценная обработка ошибок — впереди
Здесь мы проверяем ввод вручную через
isdigit() (глава 8). Настоящий механизм обработки исключений — try/except — придёт в отдельной главе позже; пока достаточно этого простого подхода.Границы — источник большинства ошибок
«Разрешены значения от 1 до 10 включительно» — как записать это правильно?
granicy.py
number = 1
print(1 <= number <= 10) # True — правильно, включает края
print(1 < number < 10) # False — ЛОВУШКА: отвергает 1 и 10!
| Значение | 1 <= number <= 10 | Комментарий |
|---|---|---|
| 0 | False | ниже границы |
| 1 | True | ровно на границе — входит |
| 10 | True | ровно на границе — входит |
| 11 | False | выше границы |
Off-by-one — классическая ошибка
Если формулировка говорит «включительно», а в коде стоит строгое
</> вместо <=/>=, граничные значения незаметно отбрасываются. Такую ошибку называют off-by-one («ошибка на единицу») — она встречается настолько часто, что заслуживает отдельного имени.Повторяемый способ проектировать условие
Перед тем как писать код:
- Какой вопрос мы задаём?
- Какие значения в нём участвуют?
- Что означает результат True?
- Что делать, если True? А если False?
- Есть ли больше двух исходов?
- Какие здесь граничные значения?
Всегда тестируйте значение чуть ниже границы, ровно на границе, и чуть выше — это простое правило ловит огромную долю логических ошибок ещё до того, как они попадут к пользователю.
★★ Самостоятельная задача
Спроектируйте сами
Требование: «Скидка положена при сумме покупки от 1000 рублей». Пройдите весь workflow — от вопроса до протестированного кода — и проверьте граничные значения 999, 1000, 1001.
Практика: валидация, границы и off-by-one
Интерактивный ноутбук прямо в браузере — Python 3.14 через Pyodide, без установки