Ветвления: 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 выполняется первая подошедшая ветка.
Проверьте себя
1. Каким оператором проверяют равенство двух значений?
A=
B==
C!=
D=>
2. Что в Python определяет, какие строки относятся к блоку if?
AФигурные скобки
BОтступы (пробелы в начале строки)
CТочка с запятой
DКавычки
3. Что выведет код: x = 5; if x > 10: print("много") else: print("мало")?
Aмного
Bмало
Cничего
Dошибку
4. Для чего нужен elif?
AДля повтора действий
BЧтобы добавить промежуточные варианты между if и else
CДля вывода на экран
DДля ввода данных

Закрепите практикой

Задачи с автоматической проверкой — решайте прямо здесь, не уходя из учебника.

Поддержать проект