💻 Практические примеры

⚡ Минимальный рабочий пример

number = -7  # int(input("Введите число: "))

if number > 0:
    print("Положительное")
elif number < 0:
    print("Отрицательное")
else:
    print("Ноль")
# Отрицательное
КонструкцияКогда применятьПример
if / elif / elseровно одна ветка из несколькихif x > 0: ... elif x < 0: ...
несколько if подряднезависимые проверки, могут сработать всеif a: ...
if b: ...
тернарный операторпростое присваивание в одну строкуr = "A" if x > 0 else "B"
match-case (3.10+)сравнение с набором значений/типовmatch x: case 1 | 2: ...
and / or / цепочка сравненийзамена вложенных ifif 0 < x < 100:
Топ-3 ошибки: несколько if вместо elif — сработают сразу оба · забытый case _: в match-case — ничего не делает · длинный тернарный вместо if-elif-else.

Пример 1. Базовый if

Простейшая форма ветвления: код внутри блока выполняется, только если условие истинно, иначе просто пропускается.

📄 basic_if.py
temperature = 38.2
if temperature > 37:
    print("Повышенная температура")

Что происходит: условие temperature > 37 истинно, поэтому строка печатается. Если бы температура была, например, 36.6, программа не вывела бы ничего — блок if без else при ложном условии просто пропускается.

Пример 2. if-elif-else: знак числа

Классическая задача из исходной практики: определить, является ли введённое число положительным, отрицательным или нулём.

📄 sign.py
number = -7  # результат int(input("Введите число: "))

if number > 0:
    print("Число положительное.")
elif number < 0:
    print("Число отрицательное.")
else:
    print("Число равно нулю.")
# Число отрицательное.

Что происходит: проверяется первое условие. Если оно истинно, печатается сообщение и остальные проверки пропускаются. Если ложно — проверяется elif, и так далее; в цепочке if-elif-else срабатывает только одна ветка.

Пример 3. Несколько независимых if — не elif

В отличие от if-elif-else, отдельные if друг от друга не зависят: каждый делает собственную проверку, поэтому сработать может и один, и все сразу.

📄 independent_checks.py
x = 20

if x > 15:
    print("x больше 15")

if x > 5:
    print("x больше 5")

if x == 0:
    print("x равен 0")
else:
    print("x не равен 0")
# x больше 15
# x больше 5
# x не равен 0

Почему так: здесь напечатались сразу три строки — каждый if проверяется независимо от результата предыдущего. Если бы это была цепочка elif, сработала бы только первая истинная ветка.

Пример 4. Truthy/falsy: приведение к bool

Любое значение в условии if Python сначала приводит к bool по своим правилам — как будто вызвал bool(значение).

📄 truthy_falsy.py
values = [0, 1, "", "текст", [], [1, 2], None, {}, {"a": 1}]
for value in values:
    if value:
        print(f"{value!r:>10} -> True")
    else:
        print(f"{value!r:>10} -> False")

Что происходит: ложными (falsy) считаются 0, 0.0, пустая строка, пустые коллекции ([], {}, (), set()) и None. Всё остальное — истинно (truthy). Отсюда идиома if my_list: вместо if len(my_list) > 0:.

Пример 5. Вложенные if vs логические операторы

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

📄 nested_vs_and.py
age = 25

if age >= 18:
    if age <= 60:
        print("Рабочий возраст (вложенный if)")

if 18 <= age <= 60:
    print("Рабочий возраст (цепочка сравнений)")

Что происходит: оба варианта дают одинаковый результат для age = 25. Цепочка сравнений 18 <= age <= 60 — это то же самое, что 18 <= age and age <= 60, но короче и без риска забыть закрыть вложенный блок.

Пример 6. and / or / not: приоритет операторов

Логические операторы можно комбинировать в одном выражении. Важно помнить порядок вычисления: сначала not, затем and, затем or.

📄 boolean_priority.py
a, b, c = True, False, True

print(a and b or c)        # (a and b) or c -> True
print(a or b and c)        # a or (b and c) -> True
print(not a and b)         # (not a) and b -> False
print(not (a and b))       # not (a and b) -> True
⚠️ Проверить по документации: точный приоритет операторов (not выше and, and выше or) в лекции отдельно не разбирался — при сомнении расставляйте скобки явно.

Пример 7. Тернарный оператор

Способ записать простое условие в одну строку. Подходит только для коротких выражений — вложенный вариант уже плохо читается.

📄 ternary.py
x = 10
result = "Положительное" if x > 0 else "Отрицательное"
print(result)

x = 0
result = "Положительное" if x > 0 else "Отрицательное" if x < 0 else "Ноль"
print(result)
# Положительное
# Ноль

Почему так: вложенный тернарный оператор технически работает («разбирается» так же, как if-elif-else), но в реальном коде такой длины лучше писать обычный блочный оператор — он читается слева направо, а не «змейкой».

Пример 8. match-case: базовый синтаксис, | и _

Появился в Python 3.10 как более мощная альтернатива switch-case из других языков. | объединяет несколько значений в одном case, _ — universal-паттерн вроде else.

📄 match_basic.py
x = 5

match x:
    case 1 | 2 | 3:
        print("Малое число")
    case 4 | 5 | 6:
        print("Среднее число")
    case _:
        print("Другое число")
# Среднее число

Пример 9. match-case: guard-условие и проверка типа

case значение if условие: позволяет добавить к паттерну проверку — паттерн сам по себе не может содержать сравнения вроде >, поэтому значение сначала «захватывают» в переменную.

📄 match_guard_type.py
number = 7
match number:
    case 1 | 2 | 3:
        print("Это один, два или три")
    case n if n > 5:
        print("Число больше 5")
    case _:
        print("Число меньше или равно 5")

value = "Hello"
match value:
    case int():
        print("Это целое число.")
    case str():
        print("Это строка.")
    case bool():
        print("Это логический тип.")
    case _:
        print("Неизвестный тип данных.")

Пример 10. match-case: паттерн-матчинг кортежей

Ещё одна возможность match-case, недоступная обычному if: сопоставление со структурой данных, а не только со значением. Переменные x и y в паттерне создаются автоматически.

📄 match_point.py
point = (0, 5)

match point:
    case (0, 0):
        print("Начало координат")
    case (x, 0):
        print(f"На оси X в точке {x}")
    case (0, y):
        print(f"На оси Y в точке {y}")
    case (x, y):
        print(f"Точка {x}, {y}")
# На оси Y в точке 5

Пример 11. Практика: доступ к разделу и стоимость билета

Два сценария из практики: вложенная проверка роли и доступа, и расчёт цены билета — независимые блоки if-elif для типа билета и для скидки.

📄 access_and_ticket.py
role = "admin"
section_access = True

if role == "admin":
    print("Вы администратор.")
    if section_access:
        print("У вас есть доступ к разделу.")
    else:
        print("У вас нет доступа к разделу.")
else:
    print("Вы не администратор.")

ticket_type = "стандартный"  # результат input("Введите тип билета (стандартный/vip): ")
age = 65  # результат int(input("Введите возраст: "))

if ticket_type == "vip":
    price = 3000
else:
    price = 1000

if age < 12:
    price *= 0.50
elif age > 60 and ticket_type == "стандартный":
    price *= 0.70

print("Стоимость билета:", price)
# Стоимость билета: 700.0

Что происходит: сначала определяется базовая цена по типу билета. Затем независимый блок if-elif применяет скидки: детям до 12 лет — 50% на любой билет, пенсионерам старше 60 — 30%, но только на стандартный билет.

Пример 12. Ловушка: спутать независимые if с elif

Частая ошибка новичков — написать несколько if там, где по смыслу нужен elif (или наоборот). Итог выглядит правильно на одних входных данных и ломается на других.

📄 if_vs_elif_pitfall.py
score = 75
if score >= 60:
    print("Зачёт")
if score >= 90:
    print("Отлично")
# напечаталось только "Зачёт" — это два независимых if,
# второе условие score >= 90 просто оказалось ложным для 75

Почему так: для score = 75 результат совпал бы и при elif, и при независимых if. Но при score = 95 независимые if напечатали бы «Зачёт» И «Отлично» одновременно — если по смыслу нужна только одна оценка, это баг. Подробнее о сравнениях см. урок 06.

Как запустить в VS Code

  1. Создайте файл sign.py (или любой другой из примеров) в рабочей папке урока.
  2. Скопируйте код из примера.
  3. Откройте терминал в VS Code (Ctrl + `).
  4. Убедитесь, что активировано виртуальное окружение: venv\Scripts\activate (Windows) или source venv/bin/activate (Mac/Linux).
  5. Запустите: python sign.py