За шесть уроков вы собрали набор инструментов для принятия решений в коде: if, elif, else, логические операторы and, or, not, тернарный оператор и match-case. По отдельности каждый понятен, но на стыке нескольких условий новички чаще всего путаются — забывают порядок веток или перепутывают and с or.
Этот урок — без новой теории. Мы разберём типичные ловушки, которые чаще всего встречаются именно там, где условий несколько, а дальше вы закрепите всё на шести задачах.
Ловушка 1. Неправильный порядок веток в elif
elif проверяет условия по очереди сверху вниз и останавливается на первом же, которое оказалось True — все остальные ветки после него даже не проверяются. Если поставить широкое условие раньше узкого, узкое никогда не сработает.
score = 95
if score >= 60:
grade = "Сдал"
elif score >= 90:
grade = "Отлично"
else:
grade = "Не сдал"
print(grade)
Сдал, хотя 95 баллов — это явно «Отлично». Условие score >= 60 уже истинно при 95, Python выполняет эту ветку и останавливается — до elif score >= 90 дело не доходит. Правило простое: узкие условия пишите раньше широких.Ловушка 2. and вместо or и наоборот
and требует, чтобы оба условия были истинны одновременно, or — чтобы хотя бы одно. Их путают, когда формулировка на русском звучит похоже, а логика противоположная.
day = "суббота"
if day == "суббота" and day == "воскресенье":
print("Выходной")
else:
print("Будний день")
Будний день — неправильно, ведь суббота выходной. Переменная day не может одновременно равняться и "суббота", и "воскресенье": с and условие всегда ложно. Нужен or: day == "суббота" or day == "воскресенье" — достаточно совпадения хотя бы с одним днём.Ловушка 3. Тернарный оператор не для сложной логики
Тернарный оператор значение_если_true if условие else значение_если_false отлично заменяет короткий if-else в одну строку. Но когда веток становится больше двух, его пытаются растянуть — и получают нечитаемую кашу вместо аккуратного кода.
temp = 15
weather = "жарко" if temp > 25 else "тепло" if temp > 10 else "холодно"
print(weather)
тепло: Python читает цепочку справа налево, как вложенные if. Но уже на трёх вариантах строку тяжело понять с первого взгляда. Тернарный оператор оставляйте для двух простых исходов, а при трёх и более ветках пишите обычный if-elif-else.Ловушка 4. Забытый case _ в match
Если в match ни один case не совпал и нет ветки case _, программа просто ничего не делает — без ошибки, без вывода. Это легко принять за баг где-то в другом месте, хотя на деле не хватает запасной ветки на все остальные случаи.
command = "help"
match command:
case "start":
print("Запуск")
case "stop":
print("Остановка")
print("Готово")
Готово: command = "help" не совпала ни с "start", ни с "stop", а ветки case _ нет. Добавляйте case _, когда входные данные могут оказаться любыми, — например print("Неизвестная команда").Что важно запомнить
elif условия проверяются по порядку, и выполняется только первая подошедшая ветка — узкие условия ставьте раньше широких.and требует истинности обоих условий сразу, or — хотя бы одного. Перед тем как писать оператор, проговорите условие словами и проверьте, какой смысл в него вкладываете.if-elif-else.match-case без ветки case _ несовпавшее значение проходит мимо без единой ошибки — добавляйте запасную ветку, если входные данные заранее не известны.Проверьте себя
4 вопроса
Кто старше
Даны три человека и их возраст: name1 = "Аня", age1 = 17; name2 = "Игорь", age2 = 21; name3 = "Марат", age3 = 19. Определите имя самого старшего и запишите его в переменную oldest. Известно, что все три возраста разные.
Выведите oldest на экран.
Скидка по сумме чека
Дана сумма покупки total = 3500 (в рублях). Скидка зависит от суммы:
- от 5000 и больше — скидка 15%
- от 2000 до 4999 — скидка 10%
- от 1000 до 1999 — скидка 5%
- меньше 1000 — скидки нет (0%)
Запишите процент скидки в переменную discount, а итоговую сумму после скидки — в переменную final (сумма минус скидка, целым числом). Выведите final.
Конвертер оценки 100 в 5
Дан результат теста в процентах: score = 78. Переведите его в привычную пятибалльную оценку и запишите в переменную grade по правилам:
- 90 и больше — 5
- от 75 до 89 — 4
- от 60 до 74 — 3
- меньше 60 — 2
Выведите grade на экран.
Четверть координатной плоскости
Даны координаты точки: x = -3, y = 5. Определите, в какой четверти координатной плоскости лежит точка, и запишите номер четверти в переменную quarter:
- 1 — если
x > 0иy > 0 - 2 — если
x < 0иy > 0 - 3 — если
x < 0иy < 0 - 4 — если
x > 0иy < 0 - 0 — если точка лежит на одной из осей (хотя бы одна координата равна нулю)
Выведите quarter на экран.
Индекс массы тела с категорией
Даны вес и рост человека: weight = 68 (кг), height = 1.75 (м). Индекс массы тела считается по формуле bmi = weight / height ** 2. Посчитайте bmi, округлив до одного знака после запятой функцией round(), а затем определите категорию и запишите её в переменную category:
- меньше 18.5 —
"Недостаток веса" - от 18.5 до 24.9 —
"Норма" - от 25 до 29.9 —
"Избыток веса" - 30 и больше —
"Ожирение"
Выведите category на экран.
Проверка пароля по трём правилам
Дан пароль password = "Sudo Team". Проверьте три правила и запишите результат каждого в отдельную переменную:
has_length—True, если в пароле не меньше 8 символовhas_upper—True, если в пароле есть хотя бы одна заглавная буква (используйте сравнениеpassword != password.lower())no_spaces—True, если в пароле нет пробелов (используйтеpassword.count(" ") == 0)
Затем запишите в is_valid результат проверки всех трёх правил сразу, а в message — "Пароль подходит", если is_valid равно True, иначе "Пароль не подходит". Выведите message.