Условие в Python пишут словом if, после него ставят проверку и двоеточие, а код, который должен выполниться, сдвигают на четыре пробела. Запасную ветку открывает else, промежуточные проверки пишут через elif. Привычное по JavaScript и C else if из двух слов Python не примет и остановится на SyntaxError.
if score >= 90:
print("Отлично")
elif score >= 50:
print("Зачёт")
else:
print("Пересдача")
Ниже разберём, как Python проверяет ветки, из чего собирать условия и на каких ошибках новички теряют больше всего времени. Общие правила записи кода собраны в статье про синтаксис Python.
Как устроен if в 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 программа при ложном условии просто ничего не сделает, и это тоже нормальный вариант.
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("Войдите в аккаунт")
Личный кабинет
Каждый уровень вложенности добавляет четыре пробела, и после третьего код читать уже тяжело. Два приёма помогают:
- Склеить проверки через
and, если у внешнегоifнет своей веткиelse:if login_ok and is_admin:. - Выйти раньше. В функции сначала отсечь неподходящий случай через
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.
Частые ошибки и что с ними делать

Ниже вывод интерпретатора. Путь к файлу в нём сократили до 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-разработчик» Перейти на сайт курса | 157 335 ₽ | 5987 ₽/мес. | 10 месяцев | Обзор курса | |
| Fullstack-разработчик на Python Перейти на сайт курса | 137 000 ₽ | 7125 ₽/мес. | 21 месяц | Обзор курса | |
| ДО Профессия Python-разработчик Перейти на сайт курса | 149 001 ₽ | 3167 ₽/мес. | 10 месяцев | Обзор курса | |
| Автоматизированное тестирование на Python Перейти на сайт курса | 118 754 ₽ | 4108 ₽/мес. | 9 месяцев | Обзор курса | |
| Профессия Python-разработчик Перейти на сайт курса | 140 040 ₽ | 3890 ₽/мес. | 10 месяцев | Обзор курса |
Больше программ — в полном каталоге курсов по Python




