Условия if, elif, else в Python
Как работает if else в Python: синтаксис if, elif и else, операторы сравнения, and/or/not, программа с input(), тернарный оператор, match/case и частые ошибки.
Содержание · 10 разделов
- Синтаксис if, else и elif
- Только if
- if и else
- Цепочка elif
- Операторы сравнения и логические операторы
- Программа if else на Python с input()
- Проверка возраста
- Простой калькулятор с elif
- Проверка ввода до преобразования
- Вложенные условия и ранний выход
- Тернарный оператор: if else в одну строку
- Что считается истиной: truthy и falsy
- match/case вместо длинной цепочки elif
- Частые ошибки
- Сравнение строки из input() с числом
- = вместо ==
- Условие x == a or b
- Отступы и пустой блок
- else if вместо elif
- is вместо ==
- Сравнение дробных чисел
- Частые вопросы
- Как проверить, что выполняются все условия из списка?
- Можно ли написать тернарный оператор без else?
- Как проверить тип переменной в условии?
- Как сравнить строки без учёта регистра?
- Итог
Конструкция if else в Python выполняет разный код в зависимости от условия: если выражение после if истинно, работает первый блок, иначе — блок после else. Дополнительные проверки добавляют через elif. Короткий ответ:
temperature = 18
if temperature > 25:
print("жарко")
elif temperature > 15:
print("тепло")
else:
print("холодно")
# → тепло
После условия ставится двоеточие, а тело блока сдвигается отступом в 4 пробела — фигурных скобок, как в C или JavaScript, нет. Ниже — синтаксис по шагам, операторы сравнения, программа if else на Python с вводом через input(), тернарный оператор и ошибки, на которых спотыкаются новички. Все примеры проверены на Python 3.12.
Синтаксис if, else и elif
Только if
Самая простая форма: блок выполняется, только если условие истинно, иначе Python его пропускает и идёт дальше.
balance = 1200
price = 990
if balance >= price:
balance -= price
print("Покупка прошла")
print("Остаток:", balance)
Покупка прошла
Остаток: 210
Строка print("Остаток:", balance) написана без отступа, поэтому она уже не входит в блок if и выполняется всегда.
if и else
else задаёт ветку «во всех остальных случаях». Условия у else нет:
n = 7
if n % 2 == 0:
print(n, "— чётное")
else:
print(n, "— нечётное")
# → 7 — нечётное
Цепочка elif
elif — сокращение от «else if». Python проверяет условия сверху вниз и выполняет первую ветку, условие которой истинно; остальные пропускаются:
score = 74
if score >= 90:
grade = "отлично"
elif score >= 75:
grade = "хорошо"
elif score >= 60:
grade = "удовлетворительно"
else:
grade = "неудовлетворительно"
print(grade) # → удовлетворительно
Веток elif может быть сколько угодно, else — не больше одной и только в конце. Порядок важен: если поставить самое широкое условие первым, до узких дело не дойдёт:
score = 95
if score >= 60:
print("удовлетворительно") # сработает эта ветка
elif score >= 90:
print("отлично") # сюда программа не попадёт
# → удовлетворительно
Операторы сравнения и логические операторы
Условие — любое выражение, которое Python может оценить как истину или ложь. Чаще всего это сравнение:
| Оператор | Значение | Пример |
|---|---|---|
== | равно | x == 5 |
!= | не равно | x != 0 |
>, < | больше, меньше | age > 18 |
>=, <= | больше или равно, меньше или равно | score >= 60 |
in, not in | входит / не входит в коллекцию или строку | "a" in word |
is, is not | тот же объект (для None) | value is None |
and | оба условия истинны | a > 0 and b > 0 |
or | хотя бы одно истинно | x < 0 or x > 100 |
not | отрицание | not items |
Python разрешает цепочки сравнений — 0 < x < 10 читается как в математике:
x = 15
print(0 < x < 10) # → False
print(10 <= x <= 20) # → True
print("py" in "python") # → True
print(3 not in [1, 2, 3]) # → False
Логические операторы объединяют условия. Вместо длинной цепочки or удобно проверять вхождение в кортеж:
age = 20
has_ticket = True
if age >= 18 and has_ticket:
print("Проходите")
day = "сб"
if day == "сб" or day == "вс":
print("Выходной")
if day in ("сб", "вс"): # то же самое короче
print("Выходной")
Сложные условия группируйте скобками. Классический пример — проверка високосного года:
year = 2024
if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0:
print(year, "— високосный")
else:
print(year, "— не високосный")
# → 2024 — високосный
Программа if else на Python с input()
Функция input() всегда возвращает строку. Чтобы сравнивать введённое значение с числом, его нужно преобразовать через int() или float() — подробнее о типах в статье о переменных и типах данных Python.
Проверка возраста
age = int(input("Сколько вам лет? "))
if age >= 18:
print("Доступ разрешён")
else:
print("Доступ запрещён, до 18 лет осталось:", 18 - age)
Сколько вам лет? 17
Доступ запрещён, до 18 лет осталось: 1
Простой калькулятор с elif
Эта программа на Python с input и if else читает два числа и знак операции, а внутри одной из веток использует вложенное условие:
a = float(input("Первое число: "))
op = input("Операция (+ - * /): ")
b = float(input("Второе число: "))
if op == "+":
print(a + b)
elif op == "-":
print(a - b)
elif op == "*":
print(a * b)
elif op == "/":
if b == 0:
print("Делить на ноль нельзя")
else:
print(a / b)
else:
print("Неизвестная операция:", op)
Первое число: 12
Операция (+ - * /): /
Второе число: 5
2.4
Проверка ввода до преобразования
Если пользователь введёт не число, int("abc") упадёт с ValueError. Для неотрицательных целых чисел достаточно проверить строку методом isdigit():
raw = input("Сколько билетов купить? ")
if not raw.isdigit():
print("Нужно целое число, получено:", raw)
elif int(raw) == 0:
print("Ноль билетов — нечего покупать")
elif int(raw) > 10:
print("Не больше 10 билетов в одни руки")
else:
print("Оформляем билетов:", int(raw))
Сколько билетов купить? abc
Нужно целое число, получено: abc
isdigit() не пропустит отрицательные и дробные числа. Универсальный способ — попытаться преобразовать значение и перехватить ошибку, это разобрано в статье о try/except в Python. А чтобы переспрашивать пользователя до правильного ответа, условие помещают внутрь цикла while.
Ответы «да/нет» перед сравнением стоит нормализовать: убрать пробелы и привести к нижнему регистру — answer = input("Продолжить? ").strip().lower(), затем if answer in ("да", "д", "yes", "y"):.
Вложенные условия и ранний выход
Внутри любой ветки можно написать ещё один if:
user = {"name": "Анна", "is_active": True, "role": "editor"}
if user["is_active"]:
if user["role"] == "admin":
print("Полный доступ")
else:
print("Доступ только к своим статьям")
else:
print("Аккаунт заблокирован")
# → Доступ только к своим статьям
Больше двух-трёх уровней вложенности читать тяжело. Внутри функции глубину уменьшают «ранним выходом»: сначала отсекают особые случаи через return, а основной сценарий пишут без отступов:
def discount(total, is_member):
if total <= 0:
return 0
if not is_member:
return 0
if total >= 5000:
return total * 0.1
return total * 0.05
print(discount(6000, True)) # → 600.0
print(discount(1000, True)) # → 50.0
print(discount(6000, False)) # → 0
Как устроены def и return, подробно описано в статье о функциях в Python.
Тернарный оператор: if else в одну строку
Когда нужно выбрать одно из двух значений, используют условное выражение значение_если_да if условие else значение_если_нет:
age = 16
status = "взрослый" if age >= 18 else "несовершеннолетний"
print(status) # → несовершеннолетний
n = 3
print(f"{n} {'товар' if n == 1 else 'товара'}") # → 3 товара
Это выражение, а не инструкция: оно возвращает значение и подходит для присваивания, аргументов функции и f-строк. Для веток с несколькими действиями пишите обычный if. Тот же приём часто встречается внутри lambda-функций, где обычный if недоступен.
Что считается истиной: truthy и falsy
В условии не обязательно писать сравнение — Python сам приводит значение к bool. Ложными считаются ноль, пустые коллекции и None, всё остальное — истинно:
for value in [0, 0.0, "", [], {}, None, "0", [0], " "]:
if value:
print(repr(value), "→ истина")
else:
print(repr(value), "→ ложь")
0 → ложь
0.0 → ложь
'' → ложь
[] → ложь
{} → ложь
None → ложь
'0' → истина
[0] → истина
' ' → истина
Поэтому проверку на пустоту пишут коротко: if not items: вместо if len(items) == 0:. А оператор or возвращает первый истинный операнд, что удобно для значений по умолчанию: name or "Гость" даст "Гость", если name — пустая строка.
match/case вместо длинной цепочки elif
С Python 3.10 для сравнения одного значения с набором вариантов есть match:
command = "stop"
match command:
case "start":
print("Запуск")
case "stop" | "exit":
print("Остановка")
case _:
print("Неизвестная команда")
# → Остановка
case _ играет роль else. Для простых проверок if/elif остаётся привычнее; match раскрывается на сопоставлении структур — кортежей, словарей, объектов. Подробности — в описании инструкции match в официальном руководстве.
Частые ошибки
Сравнение строки из input() с числом
age = input("Возраст: ")
if age >= 18:
print("ok")
# → TypeError: '>=' not supported between instances of 'str' and 'int'
input() вернул строку "20", а строку нельзя сравнить с числом через >=. Оберните ввод в int(): age = int(input("Возраст: ")).
= вместо ==
if x = 5:
print(x)
# → SyntaxError: invalid syntax. Maybe you meant '==' or ':=' instead of '='?
Один знак = — присваивание, для сравнения нужен ==.
Условие x == a or b
color = "синий"
if color == "красный" or "зелёный":
print("Тёплый или зелёный?") # выполнится!
Python читает это как (color == "красный") or "зелёный", а непустая строка "зелёный" всегда истинна. Правильно: color == "красный" or color == "зелёный" или color in ("красный", "зелёный").
Отступы и пустой блок
if x > 0:
print("положительное")
# → IndentationError: expected an indented block after 'if' statement on line 1
Тело блока обязано иметь отступ. Если ветку пока нечем заполнить, поставьте pass — одного комментария недостаточно, он тоже вызовет IndentationError.
else if вместо elif
Запись else if x > 3: в Python — синтаксическая ошибка (SyntaxError: expected ':'). Используйте ключевое слово elif.
is вместо ==
is проверяет, что это один и тот же объект, а не равенство значений. Сравнение a is b для двух одинаковых чисел 1000 может вернуть False, хотя a == b — True. Используйте is для проверки на None: if value is None:. Логическое значение с True и False сравнивать не нужно — пишите просто if flag:.
Сравнение дробных чисел
0.1 + 0.2 == 0.3 возвращает False из-за двоичного представления float. Для таких проверок используйте math.isclose(0.1 + 0.2, 0.3) — он вернёт True.
Частые вопросы
Как проверить, что выполняются все условия из списка?
Функция all() возвращает True, если истинны все элементы, any() — если истинен хотя бы один. Так длинную цепочку and или or заменяют одной проверкой.
scores = [72, 95, 88]
print(all(s >= 60 for s in scores)) # → True
print(any(s >= 90 for s in scores)) # → True
Можно ли написать тернарный оператор без else?
Нельзя: условное выражение всегда должно вернуть значение, и без else Python выдаст SyntaxError: expected 'else' after 'if' expression. Если нужно только действие, запишите обычный if в одну строку: if x > 0: print(x).
Как проверить тип переменной в условии?
Используйте isinstance(): вторым аргументом можно передать кортеж типов. Учтите, что bool — подкласс int, поэтому isinstance(True, int) тоже вернёт True.
value = 3.5
print(isinstance(value, (int, float))) # → True
print(isinstance(True, int)) # → True
Как сравнить строки без учёта регистра?
Приведите обе строки к одному регистру. lower() подходит для большинства случаев, а casefold() дополнительно учитывает особые правила некоторых языков, например немецкую «ß».
print("Да".casefold() == "да") # → True
print("Straße".casefold() == "STRASSE".casefold()) # → True
Итог
if проверяет условие, elif добавляет альтернативные проверки, else ловит все остальные случаи; блоки задаются двоеточием и отступом. Значения из input() перед сравнением с числами преобразуйте через int() или float(), для выбора одного из двух значений используйте тернарный оператор, а для длинных цепочек сравнений одной переменной — match. Остальной базовый синтаксис собран в шпаргалке по синтаксису Python, следующий шаг — цикл for, а потренироваться в условиях помогут задачи с решениями.
- #Python
- #if else
- #Условия
- #Синтаксис
- #input