5. Условия и ветвления

if / elif / else
Заголовок раздела «if / elif / else»age = 25
if age < 18: print("Несовершеннолетний")elif age < 65: print("Взрослый")else: print("Пенсионер")В отличие от JS: нет else if — только elif.
Сравнение с JavaScript
Заголовок раздела «Сравнение с JavaScript»# Python # JavaScriptif x > 0: # if (x > 0) { print("pos") # console.log("pos")elif x < 0: # } else if (x < 0) { print("neg") # console.log("neg")else: # } else { print("zero") # console.log("zero") # }Тернарный оператор
Заголовок раздела «Тернарный оператор»# Python: значение_если_true if условие else значение_если_falseage = 20status = "adult" if age >= 18 else "minor"
# Сравни с JS: условие ? значение_если_true : значение_если_false# const status = age >= 18 ? "adult" : "minor";Логические операторы
Заголовок раздела «Логические операторы»# and, or, not (не &&, ||, !)x = 5
if x > 0 and x < 10: print("однозначное число")
if x < 0 or x > 100: print("выход за диапазон")
if not (x == 0): print("не ноль")
# Chained comparisons (Python фишка!)if 0 < x < 10: # Эквивалентно: x > 0 and x < 10 print("от 0 до 10")
if 1 <= age <= 120: print("корректный возраст")Истинность значений (Truthiness)
Заголовок раздела «Истинность значений (Truthiness)»# Falsy значения (все остальное — truthy)falsy_values = [False, None, 0, 0.0, "", [], {}, set()]
for val in falsy_values: if not val: print(f"{repr(val)} is falsy")
# Практически используем так:user = Noneif user: # вместо: if user is not None print(f"Hello, {user}")
items = []if not items: # вместо: if len(items) == 0 print("Список пуст")
name = ""display_name = name or "Аноним" # "Аноним" если name пустаяis vs ==
Заголовок раздела «is vs ==»# == проверяет значение# is проверяет идентичность объекта (та же ячейка памяти)
a = [1, 2, 3]b = [1, 2, 3]
print(a == b) # True — одинаковые значенияprint(a is b) # False — разные объекты
# is используется с None, True, Falseuser = Noneif user is None: # правильно! print("нет пользователя")
if user == None: # работает, но не pythonic print("нет пользователя")match / case (Python 3.10+)
Заголовок раздела «match / case (Python 3.10+)»Pattern matching — как switch/case, но намного мощнее:
# Простой matchcommand = "start"match command: case "start": print("Запуск...") case "stop": print("Остановка...") case "restart": print("Перезапуск...") case _: # default print(f"Неизвестная команда: {command}")
# Match с условиями (guard)status_code = 404match status_code: case 200 | 201 | 204: print("Успех") case 400: print("Bad Request") case 401 | 403: print("Нет доступа") case 404: print("Не найдено") case code if 500 <= code < 600: print(f"Серверная ошибка: {code}") case _: print("Неизвестный статус")
# Match со структурами (очень мощно!)user = {"role": "admin", "active": True}match user: case {"role": "admin", "active": True}: print("Активный администратор") case {"role": "admin"}: print("Неактивный администратор") case {"role": role}: print(f"Пользователь с ролью: {role}")Практические примеры
Заголовок раздела «Практические примеры»# Валидация данныхdef validate_age(age): if not isinstance(age, int): return "Возраст должен быть целым числом" if age < 0: return "Возраст не может быть отрицательным" if age > 150: return "Недопустимый возраст" return None # OK
# Обработка HTTP статусовdef handle_response(status: int, data: dict | None = None): match status: case 200 | 201: return {"success": True, "data": data} case 400: return {"success": False, "error": "Некорректный запрос"} case 401: return {"success": False, "error": "Не авторизован"} case 403: return {"success": False, "error": "Нет доступа"} case 404: return {"success": False, "error": "Не найдено"} case _: return {"success": False, "error": "Неизвестная ошибка"}
# Проверка прав доступаdef check_permission(user: dict, action: str) -> bool: if not user.get("is_active"): return False
role = user.get("role", "guest")
if role == "admin": return True # admin может всё
if role == "editor": return action in ["read", "write"]
return action == "read" # guest только читаетЗадание
Заголовок раздела «Задание»# Задание 1: Калькулятор# Напиши функцию, принимающую два числа и операцию (+, -, *, /)# и возвращающую результат. Используй match/case.
# Задание 2: Классификатор# Напиши функцию classify_bmi(weight_kg, height_m) -> str# Категории: Underweight < 18.5, Normal 18.5-25, Overweight 25-30, Obese > 30
# Задание 3: Авторизация# Напиши функцию can_access(user, resource) -> bool# user = {"role": "editor", "is_active": True, "department": "tech"}# Логика: admin — всё, editor — только свой отдел, user — только чтениеВ следующем уроке — циклы!