Django-Admin.ru

Условия if, elif, else в Python

Как работает if else в Python: синтаксис if, elif и else, операторы сравнения, and/or/not, программа с input(), тернарный оператор, match/case и частые ошибки.

Редакция Django-Admin.ru
· обновлено · 11 мин чтения

Содержание · 10 разделов
  1. Синтаксис if, else и elif
  2. Только if
  3. if и else
  4. Цепочка elif
  5. Операторы сравнения и логические операторы
  6. Программа if else на Python с input()
  7. Проверка возраста
  8. Простой калькулятор с elif
  9. Проверка ввода до преобразования
  10. Вложенные условия и ранний выход
  11. Тернарный оператор: if else в одну строку
  12. Что считается истиной: truthy и falsy
  13. match/case вместо длинной цепочки elif
  14. Частые ошибки
  15. Сравнение строки из input() с числом
  16. = вместо ==
  17. Условие x == a or b
  18. Отступы и пустой блок
  19. else if вместо elif
  20. is вместо ==
  21. Сравнение дробных чисел
  22. Частые вопросы
  23. Как проверить, что выполняются все условия из списка?
  24. Можно ли написать тернарный оператор без else?
  25. Как проверить тип переменной в условии?
  26. Как сравнить строки без учёта регистра?
  27. Итог

Конструкция 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
↑ ↓ выборEnter открытьEsc закрыть