Ветвления: if, elif, else
Учим программу принимать решения с помощью условного оператора if, elif и else.
Условный оператор
ifвыполняет блок кода только тогда, когда заданное условие истинно.
Программа, которая думает
В разделе про алгоритмы мы говорили про ветвление как про идею. Теперь воплотим её в коде. Без ветвлений программа всегда делает одно и то же. А с ними она может реагировать по-разному: пропускать одни действия, выполнять другие. Именно ветвления делают программы «умными».
Оператор if
Простейшее ветвление — if (по-английски «если»). После if пишут условие и двоеточие, а на следующей строке с отступом — что делать, если условие истинно.
temperatura = 5
if temperatura < 10:
print("Холодно, надень куртку")
print("Хорошего дня!")
Вывод:
Холодно, надень куртку Хорошего дня!
Условие temperatura < 10 истинно (5 меньше 10), поэтому совет про куртку вывелся. А «Хорошего дня!» выводится всегда — оно без отступа, то есть не входит в if. Поменяй температуру на 20 — и совет про куртку исчезнет, а пожелание останется.
Отступы — это важно!
Обрати внимание на отступ (4 пробела) перед строкой внутри if. В Python отступы не для красоты — они показывают, какие строки относятся к условию. Всё, что с отступом после if, выполняется только при истинном условии. Это особенность Python: в других языках для этого ставят скобки, а здесь — отступы.
Отступ в Python — часть синтаксиса. Строки с одинаковым отступом образуют один блок.
Операторы сравнения
Условия строят с помощью сравнений. Их шесть:
| Оператор | Значение |
> | больше |
< | меньше |
>= | больше или равно |
<= | меньше или равно |
== | равно (два знака равно!) |
!= | не равно |
Особое внимание на ==: чтобы проверить равенство, ставят два знака равно. Один знак = — это присваивание (положить в коробку), а два == — это вопрос «равны ли?». Их легко перепутать, и это частая ошибка новичков.
Логические значения: True и False
Что вообще такое «условие» с точки зрения Python? Когда он проверяет 5 < 10, у него получается ответ — да или нет. В Python эти ответы называются True (истина) и False (ложь) — это особый тип данных, логический (по-английски bool). Любое сравнение даёт одно из этих двух значений, и именно по нему if решает, выполнять блок или нет.
print(5 < 10)
print(5 > 10)
print(7 == 7)
print(3 != 3)
Вывод:
True False True False
Видишь? Каждое сравнение Python превращает в True или False. Можно представить, что if читает результат сравнения и думает: «истина? тогда выполняю; ложь? пропускаю». Понимание, что условие — это просто значение True или False, очень помогает: ты всегда можешь мысленно «вычислить» условие и понять, по какой ветке пойдёт программа.
Сложные условия: and, or, not
Часто одного сравнения мало. «Если день — суббота или воскресенье, то выходной». «Если оценка больше 3 и нет пропусков, то допущен к экзамену». Чтобы объединять условия, есть три слова: and (и — оба должны быть истинны), or (или — хотя бы одно истинно), not (не — переворачивает значение). Например, temperatura > 0 and temperatura < 30 истинно только когда температура и больше нуля, и меньше тридцати одновременно. Эти связки делают условия по-настоящему гибкими и встречаются в программах сплошь и рядом.
else: что делать иначе
Часто нужно сделать одно при истинном условии и другое — при ложном. Для второй ветки есть else («иначе»).
ocenka = 4
if ocenka >= 3:
print("Зачёт!")
else:
print("Нужно пересдать")
Вывод:
Зачёт!
Выполняется ровно одна из двух веток. Если оценка 3 или больше — «Зачёт», иначе — «Нужно пересдать». Поменяй ocenka на 2 и проверь.
elif: несколько вариантов
А если вариантов больше двух? Тогда между if и else добавляют elif (сокращение от «else if» — «иначе если»). Python проверяет условия по очереди и выполняет первое подошедшее.
Попробуй сам
Классика — программа, которая по числу баллов ставит оценку. Здесь видны все три части: if, несколько elif и else.
bally = 78
if bally >= 90:
print("Оценка: 5 (отлично)")
elif bally >= 75:
print("Оценка: 4 (хорошо)")
elif bally >= 50:
print("Оценка: 3 (удовлетворительно)")
else:
print("Оценка: 2 (нужно подтянуть)")
Вывод:
Оценка: 4 (хорошо)
78 баллов: первое условие (≥90) ложно, а второе (≥75) истинно — выводится «4», и остальные ветки Python даже не проверяет. Поменяй bally на 95, на 60, на 30 — и посмотри, как программа выбирает разные оценки. Порядок условий тут важен: они идут от большего к меньшему.
Задача: угадай, какой год
Применим всё сразу — и сложные условия с and, и цепочку if/elif/else. Программа определяет, високосный ли год. Правило хитрое: год високосный, если делится на 4, но не на 100, — кроме случая, когда делится на 400. Звучит сложно, но с условиями раскладывается ясно.
god = 2024
if god % 400 == 0:
visokosnyy = True
elif god % 100 == 0:
visokosnyy = False
elif god % 4 == 0:
visokosnyy = True
else:
visokosnyy = False
if visokosnyy:
print(god, "— високосный год (366 дней)")
else:
print(god, "— обычный год (365 дней)")
Вывод:
2024 — високосный год (366 дней)
Смотри, как порядок проверок решает всё: сначала особый случай (делится на 400), потом исключение (делится на 100), и только потом общее правило (делится на 4). Если переставить условия местами, программа начнёт ошибаться. Это отличная иллюстрация того, почему в if/elif/else порядок так важен. Проверь годы 2000, 1900 и 2023 — увидишь, как работают все ветки. Кстати, ровно по этому правилу твой телефон и компьютер знают, когда в феврале 29 дней.
Частые ошибки
- Писать
=вместо==в условии. Для проверки равенства нужны два знака равно. - Забыть двоеточие после условия. После
if,elif,elseобязательно ставится:. - Сбить отступы. Строки внутри
ifдолжны иметь одинаковый отступ. - Перепутать порядок условий в
elif. Проверяется первое истинное, поэтому порядок важен.
Запомни
ifвыполняет блок при истинном условии;else— иначе;elifдобавляет промежуточные варианты.- Отступы (4 пробела) задают, какие строки входят в блок условия.
- Равенство проверяют двумя знаками
==; один=— присваивание. - В цепочке
if/elif/elseвыполняется первая подошедшая ветка.
Закрепите практикой
Задачи с автоматической проверкой — решайте прямо здесь, не уходя из учебника.