Условные конструкции if/elif/else: пишем логику простыми словами

Разберём, как в Python строить ветвления — чтобы код делал разные вещи в зависимости от условий. Без лишней теории: только примеры и типичные ситуации, которые реально встречаются в работе.


Базовый if: когда нужно одно условие

Самый простой случай: если условие верно — делаем что‑то, если нет — ничего не делаем.

python
age = 18
 
if age >= 18:
    print("Доступ разрешён")

Здесь age >= 18 — это условие. Оно возвращает True или False. Если True, выполняется блок кода под if.

Важно: после условия ставится двоеточие :, а тело блока обязательно с отступом (обычно 4 пробела).


if + else: два варианта

Когда нужны два пути: «если да — то это», «если нет — то вот это».

python
balance = 50
 
if balance >= 100:
    print("Можно купить премиум")
else:
    print("Не хватает средств")

else срабатывает только если условие в if оказалось ложным. else без if не бывает.


elif: когда условий больше двух

Если вариантов больше двух, используют elif (сокращение от else if). Проверки идут сверху вниз: как только одно условие стало True, этот блок выполняется, а остальные пропускаются.

python
score = 85
 
if score >= 90:
    grade = "A"
elif score >= 80:
    grade = "B"
elif score >= 70:
    grade = "C"
else:
    grade = "D"
 
print(f"Оценка: {grade}")

Для score = 85 сработает второй блок (>= 80), дальше проверка не пойдёт.

Частая ошибка: писать несколько отдельных if вместо elif, когда логика должна быть взаимоисключающей:

python
# Плохо: все условия проверяются независимо
if score >= 80:
    grade = "B"
if score >= 70:
    grade = "C"   # может выполниться одновременно с предыдущим

В этом примере при score = 85 оба блока сработают, и в итоге останется "C" — не то, что планировалось.


Как правильно сравнивать

В условиях чаще всего используют операторы сравнения:

  • == — равно
  • != — не равно
  • <, > — меньше, больше
  • <=, >= — меньше или равно, больше или равно
python
status = "active"
 
if status == "active":
    print("Пользователь активен")

Важно: в Python = — это присваивание, а == — сравнение. Если написать if status = "active":, будет синтаксическая ошибка.


Условия с логическими операторами: and, or, not

Когда нужно комбинировать несколько проверок.

and — оба условия должны быть истинными

python
age = 20
has_license = True
 
if age >= 18 and has_license:
    print("Можно управлять автомобилем")

or — достаточно одного из условий

python
is_weekend = True
is_holiday = False
 
if is_weekend or is_holiday:
    print("Выходной")

not — инвертировать условие

python
logged_in = False
 
if not logged_in:
    print("Пожалуйста, войдите в систему")

Скобки помогают сделать логику понятнее:

python
if (age >= 18) and (has_license or has_instructor):
    ...

Пустые значения как условия

В Python многие типы можно использовать в условии напрямую: 0, пустая строка "", пустой список [], None считаются «ложными» (False), а почти всё остальное — «истинным» (True).

python
name = ""
 
if name:
    print(f"Привет, {name}")
else:
    print("Имя не указано")

Это удобно, но иногда лучше писать явно, чтобы код был понятнее другим:

python
if name != "":
    ...

Типичные ошибки и как их избежать

  • Забыли двоеточие после условия.
    if age > 18 → ошибка. Правильно: if age > 18:
  • Неправильный отступ.
    Блок должен быть выровнен. Смешивание табуляций и пробелов часто ломает код.
  • Путаница = и ==.
    Присваивание в условии не сработает так, как хочется.
  • Несколько if вместо elif.
    Если варианты взаимоисключающие, используйте elif.
  • Слишком сложные условия в одной строке.
    Лучше вынести проверку в переменную:

    python
    is_eligible = (age >= 18) and (score >= 70)
    if is_eligible:
        ...

Практический пример: проверка доступа к форуму

Допустим, нужно разрешить доступ, только если пользователь авторизован и не заблокирован.

python
is_logged_in = True
is_banned = False
role = "user"
 
if not is_logged_in:
    print("Сначала войдите в систему")
elif is_banned:
    print("Ваш аккаунт заблокирован")
elif role == "guest":
    print("Гостевые аккаунты не имеют доступа")
else:
    print("Доступ разрешён")

Порядок проверок важен: сначала проверяем отсутствие входа, потом бан, потом роль, и только если всё хорошо — разрешаем доступ.


Ещё один пример: расчёт скидки

python
total = 1200
is_vip = True
 
if total >= 2000:
    discount = 0.2
elif total >= 1000 and is_vip:
    discount = 0.15
elif total >= 1000:
    discount = 0.1
else:
    discount = 0
 
final_price = total * (1 - discount)
print(f"Итоговая цена: {final_price:.2f}")

Здесь логика идёт от «самой большой скидки» к «самой маленькой», и elif гарантирует, что применится только одна скидка.


Короткий шаблон, который можно копировать

python
if <условие>:
    <код, если условие верно>
elif <другое условие>:
    <код, если первое неверно, а это верно>
elif <ещё одно условие>:
    <ещё вариант>
else:
    <код, если ни одно условие не сработало>

Количество elif может быть любым, else — необязателен.

Добавить комментарий