Условия в Python: как работают if, elif и else

Условие в Python пишут через if, запасную ветку через else, а промежуточные проверки через elif: вариант else if из двух слов не сработает.

Разбираем порядок веток, and, or и истинность значений, вложенные условия и match, а также семь частых ошибок новичков с выводом интерпретатора.

Статью написал:
Ваня Буявец, продюсер, основатель Checkroi
Ваня Буявец
Основатель Checkroi, продюсер, эксперт в выборе онлайн-курсов
Все 3221 статья автора Подписаться на Телеграм-канал
Одобрено экспертом:
Наташа Буявец, основатель Checkroi, эксперт по онлайн-курсам
Наташа Буявец
Основательница Checkroi, продюсер Youtube-каналов, эксперт по онлайн-курсам
Все 3875 экспертных мнений Подписаться на Телеграм-канал
Обложка: Условия в Python: как работают if, elif и else

Условие в Python пишут словом if, после него ставят проверку и двоеточие, а код, который должен выполниться, сдвигают на четыре пробела. Запасную ветку открывает else, промежуточные проверки пишут через elif. Привычное по JavaScript и C else if из двух слов Python не примет и остановится на SyntaxError.

if score >= 90:
    print("Отлично")
elif score >= 50:
    print("Зачёт")
else:
    print("Пересдача")

Ниже разберём, как Python проверяет ветки, из чего собирать условия и на каких ошибках новички теряют больше всего времени. Общие правила записи кода собраны в статье про синтаксис Python.

CheckroiCheckroiПодборка курсов по Python570 курсов • 53 школыСравните цены, школы, программу и найдите выгодные предложения по обучениюСравнить→

Как устроен if в Python

Рой пишет первое условие на Python

Конструкция if проверяет условие и выполняет вложенный блок, только когда условие истинно. Если ложно, Python пропускает блок и идёт дальше.

Проверка вроде temperature > 25 возвращает значение типа bool: True или False. Чем он отличается от чисел и строк, видно в таблице типов данных Python.

temperature = 28

if temperature > 25:
    print("Жарко, возьмите воду")
print("Проверка закончена")
Жарко, возьмите воду
Проверка закончена

Вторая строка печатается при любой температуре: у неё нет отступа, значит, она уже не относится к if.

Что нужно помнить при записи:

  • Двоеточие после условия обязательно, оно открывает блок.
  • Отступ показывает, какие строки входят в блок. Фигурных скобок в Python нет, принято сдвигать код на четыре пробела.
  • Слово then не нужно, а скобки вокруг условия не обязательны: if (x > 3): работает, но обычно пишут if x > 3:.

if и else: когда нужен запасной вариант

Ветка else срабатывает, если условие в if оказалось ложным. Своего условия у неё нет, после слова сразу ставится двоеточие.

age = 15

if age >= 18:
    print("Билет взрослый")
else:
    print("Билет детский")
Билет детский

Из двух веток всегда выполнится ровно одна. Без else программа при ложном условии просто ничего не сделает, и это тоже нормальный вариант.

Канал основателя Checkroi Вани Буявца3 800 человек читают мой Телеграм-канал про нейросетиСобрал промпты для Claude Code и ChatGPT, разборы ИИ-инструментов и лайфхаки по продвижению бизнеса в одном местеПрисоединиться

elif: несколько условий подряд

Когда вариантов больше двух, между if и else ставят одну или несколько веток elif. В официальном учебнике Python слово расшифровано как сокращение от else if: веток elif может быть сколько угодно или ни одной, а else необязателен.

score = 74

if score >= 90:
    print("Отлично")
elif score >= 75:
    print("Хорошо")
elif score >= 50:
    print("Зачёт")
else:
    print("Пересдача")
Зачёт

Python идёт сверху вниз и выполняет первую ветку, чьё условие истинно. Остальные он уже не проверяет. Балл 74 не проходит первые две проверки, подходит под третью, и на ней всё заканчивается.

Порядок веток решает результат

Из-за правила «первая подошедшая ветка» строгие условия ставят выше мягких. Вот что будет, если перепутать:

score = 95

if score >= 50:
    print("Зачёт")
elif score >= 90:
    print("Отлично")
Зачёт

Ошибки интерпретатор не выдаст, но 95 баллов попадут в «Зачёт»: проверка score >= 50 истинна и перехватывает всё, что выше.

Решение: сортируйте пороги от большего к меньшему или пишите условия диапазонами, например 50 <= score < 75.

Из чего собирать условия

Развилка из трёх дорог как ветки условия

Условием в if может быть любое выражение, которое Python сводит к истине или лжи. Чаще всего это сравнение.

Оператор Что проверяет Пример
== равенство x == 5
!= неравенство x != 0
>, <, >=, <= больше, меньше age >= 18
in есть ли значение в наборе "a" in word
is тот же ли это объект x is None
and, or, not «и», «или», «не» a and not b

Подробно про каждый знак, включая // и %, рассказано в статье про операторы Python, а частые промахи с неравенством разобраны отдельно в материале «Не равно в Python».

Несколько проверок склеивают через and и or. Сравнения можно писать цепочкой, как в математике:

age = 34
has_ticket = True

if 18 <= age < 65 and has_ticket:
    print("Проходите")

if not has_ticket or age < 18:
    print("Вход закрыт")
else:
    print("Ограничений нет")
Проходите
Ограничений нет

Много проверок сразу: any() и all()

Когда условий пять-шесть, строка с and растягивается за край экрана. Проверки можно сложить в список и передать встроенным функциям. all() вернёт True, если истинны все элементы, а any(), если истинен хотя бы один.

password = "qwerty2026"

checks = [
    len(password) >= 8,
    any(ch.isdigit() for ch in password),
    any(ch.isupper() for ch in password),
]

if all(checks):
    print("Пароль надёжный")
elif any(checks):
    print("Пароль слабый")
else:
    print("Пароль не подходит")
Пароль слабый

Длина и цифры на месте, заглавной буквы нет. Поэтому all() даёт ложь, а any() истину, и срабатывает средняя ветка.

Что Python считает истиной

В условие можно подставить не только сравнение, но и число, строку или список. В документации Python перечислено, что считается ложью: None и False, ноль любого числового типа, пустые строки, списки, кортежи, словари и множества. Всё остальное истинно.

for value in [0, 7, "", "текст", [], [1, 2], None]:
    if value:
        print(repr(value), "→ истина")
    else:
        print(repr(value), "→ ложь")
0 → ложь
7 → истина
'' → ложь
'текст' → истина
[] → ложь
[1, 2] → истина
None → ложь

Поэтому проверку «список не пустой» пишут коротко: if items:. Сравнивать с True через == не нужно, это прямо не советует PEP 8, руководство по стилю кода Python.

Вложенные условия и как их сократить

Внутрь любой ветки можно поставить ещё один if. Так делают, когда вторая проверка имеет смысл только после первой: права администратора проверять, пока человек не вошёл в аккаунт, незачем.

login_ok = True
is_admin = False

if login_ok:
    if is_admin:
        print("Панель администратора")
    else:
        print("Личный кабинет")
else:
    print("Войдите в аккаунт")
Личный кабинет

Каждый уровень вложенности добавляет четыре пробела, и после третьего код читать уже тяжело. Два приёма помогают:

  1. Склеить проверки через and, если у внешнего if нет своей ветки else: if login_ok and is_admin:.
  2. Выйти раньше. В функции сначала отсечь неподходящий случай через return, а основную логику писать без лишнего отступа. Как устроены функции и return, рассказано в статье про функции в Python.

Короткие формы: тернарный оператор и match

Условие в одну строку

Если нужно просто выбрать одно из двух значений, хватит одной строки:

n = 7
parity = "чётное" if n % 2 == 0 else "нечётное"
print(parity)
нечётное

Эта запись называется тернарным оператором. Где он уместен и почему вложенные тернарники лучше развернуть обратно в обычный if, мы разобрали в статье «Тернарный оператор в Python».

match вместо длинной цепочки elif

Когда одну переменную сравнивают с набором конкретных значений, вместо пяти elif можно написать match: каждое значение получит свою строку case. Конструкция появилась в Python 3.10, в более старых версиях она не запустится.

command = "stop"

match command:
    case "start":
        print("Запускаю")
    case "stop" | "exit":
        print("Останавливаю")
    case _:
        print("Не знаю такой команды")
Останавливаю

Вертикальная черта объединяет варианты, а case _ работает как else. Пороги «больше-меньше» в match пришлось бы писать через case с дополнительным условием, поэтому для них оставляют if и elif.

Ваня БуявецКанал основателя Checkroi Вани БуявцаЗабирайте промпты и обучение по нейросетям в моём Телеграм-каналеБольше 3 800 человек уже применяют Claude Code, ChatGPT и другие нейросети в работе, учёбе, бизнесе и жизниПерейти в канал

Частые ошибки и что с ними делать

Рой радуется, что исправленный код заработал

Ниже вывод интерпретатора. Путь к файлу в нём сократили до main.py, остальное оставили как есть.

Забыли двоеточие

  File "main.py", line 2
    if x > 3
            ^
SyntaxError: expected ':'

Решение: поставить : в конце строки с if, elif или else.

Нет отступа в блоке

  File "main.py", line 3
    print("больше трёх")
    ^^^^^
IndentationError: expected an indented block after 'if' statement on line 2

Решение: сдвинуть строки блока на четыре пробела и не смешивать пробелы с табуляцией. Редакторы вроде VS Code ставят отступ сами после двоеточия.

Одно «=» вместо двух

  File "main.py", line 2
    if x = 5:
       ^^^^^
SyntaxError: invalid syntax. Maybe you meant '==' or ':=' instead of '='?

Одиночное = присваивает значение, а сравнивает ==. Python сам подсказывает исправление в тексте ошибки.

else if вместо elif

  File "main.py", line 4
    else if x > 3:
         ^^
SyntaxError: expected ':'

Привычка из других языков. После else Python ждёт двоеточие, а встречает if. Решение: заменить два слова на elif.

Сравнили строку с числом

Функция input() всегда возвращает строку, даже если пользователь ввёл цифры. Сравнение со строкой падает:

Traceback (most recent call last):
  File "main.py", line 2, in <module>
    if age >= 18:
       ^^^^^^^^^
TypeError: '>=' not supported between instances of 'str' and 'int'

Решение: перевести ввод в число через int(). Как сделать это без падения на буквах, разобрано в статье про ввод числа в Python.

Условие всегда истинно из-за or

Здесь интерпретатор ничего не подскажет: программа запустится и выдаст неверный ответ.

color = "синий"

if color == "красный" or "зелёный":
    print("Цвет светофора")
Цвет светофора

Python читает условие как (color == "красный") or "зелёный". Непустая строка "зелёный" истинна, поэтому проверка проходит для любого цвета. Решение: повторить сравнение в каждой части или взять in:

if color in ("красный", "жёлтый", "зелёный"):
    print("Цвет светофора")
else:
    print("Другой цвет")
Другой цвет

Сравнение с None через ==

Работать будет, но по PEP 8 с None сравнивают через is или is not, а не через операторы равенства:

result = None

if result is None:
    print("Данных пока нет")
Данных пока нет

Как закрепить условия на практике

Синтаксис if запоминается за вечер, а уверенность приходит после двух-трёх десятков маленьких задач. Начать можно с таких:

  • программа спрашивает год и отвечает, високосный ли он;
  • по сумме покупки выдаёт скидку: до 1 000 ₽ без скидки, до 5 000 ₽ пять процентов, выше десять;
  • по трём сторонам решает, получится ли треугольник.

Ещё тридцать задач с ответами собраны в подборке «Задачи по Python для начинающих». Установка для них не нужна: код можно запускать в браузере, подойдёт любой онлайн-компилятор Python. После условий обычно переходят к циклам: цикл while повторяет блок, пока условие истинно.

Где освоить Python системно

Условия, циклы и функции проходят в первые недели любого курса по Python. Дальше идут файлы, библиотеки, базы данных и собственные проекты, и на этом этапе многим нужен наставник, который проверит код и объяснит ошибки. Мы собрали курсы Python с ценами и отзывами, ниже пять программ из каталога:

КурсШколаСтоимость со скидкойВ рассрочкуДлитель­ностьОбзор курса от Checkroi
Профессия «Python-разработчик»
Перейти на сайт курса
SkillboxSkillbox157 335 ₽5987 ₽/мес.10 месяцевОбзор курса
Fullstack-разработчик на Python
Перейти на сайт курса
НетологияНетология137 000 ₽7125 ₽/мес.21 месяцОбзор курса
ДО Профессия Python-разработчик
Перейти на сайт курса
GeekBrainsGeekBrains149 001 ₽3167 ₽/мес.10 месяцевОбзор курса
Автоматизированное тестирование на Python
Перейти на сайт курса
SkillboxSkillbox118 754 ₽4108 ₽/мес.9 месяцевОбзор курса
Профессия Python-разработчик
Перейти на сайт курса
SkillFactorySkillFactory140 040 ₽3890 ₽/мес.10 месяцевОбзор курса

Больше программ — в полном каталоге курсов по Python

Часто задаваемые вопросы

Чем elif отличается от else if?

В Python есть только elif, это одно слово. Запись else if из JavaScript и C здесь не работает: интерпретатор остановится на SyntaxError: expected ':'.

Сколько веток elif можно написать?

Сколько угодно, ограничения нет. Python проверяет их сверху вниз и выполняет первую подошедшую, поэтому строгие условия ставят выше мягких. Если веток больше пяти и все сравнивают одну переменную с конкретными значениями, их можно заменить на match.

Обязательно ли писать else?

Нет. Без else программа при ложном условии просто пропустит блок и пойдёт дальше.

Как проверить несколько условий в одном if?

Соединить их через and (нужны все) или or (хватит одного). Для длинного списка проверок есть функции all() и any(). Сравнения можно писать цепочкой: 18 <= age < 65.

Почему условие с or срабатывает всегда?

Обычно так выглядит запись if color == "красный" or "зелёный":. Вторая часть здесь просто непустая строка, а она всегда истинна. Сравнение нужно повторить в каждой части или заменить на if color in ("красный", "зелёный"):.

Есть ли в Python switch?

Слова switch нет. Его роль играет цепочка if/elif, а с Python 3.10 ещё и конструкция match/case.

Читайте Checkroi первым в Google
Добавьте Checkroi в избранные источники — и наши разборы курсов и обзоры школ будут показываться выше в вашей выдаче Google.
Оставить комментарий
0 комментариев
Форма комментария

Оставьте комментарий

Напишите, что думаете. Нам важно ваше мнение!