McBin

Сложные условия: elif и логические связки | Урок 4

# УРОК: Сложные условия — elif и магия логических связок

Привет! 👋 Сегодня мы переходим от простого к интересному.

До этого момента твои программы умели принимать решения только в стиле «Орёл или Решка»: если условие верно — делаем одно, иначе — другое. Но жизнь (и крутой софт) устроена сложнее.

Представь, что ты разрабатываешь игру. Персонаж может не просто «быть живым» или «мертвым». Он может быть «ранен», «отравлен», «в режиме невидимки» или «обладать суперсилой». Обычным `if-else` тут не обойтись.

Сегодня мы научим твою программу думать многогранно, используя **`elif`** и логические связки **`and`**, **`or`**, **`not`**. Поехали!

---

## Часть 1: `elif` — когда вариантов больше двух

В Python `elif` — это сокращение от **"else if"** (иначе если). Это способ сказать компьютеру: «Если первый вариант не подошел, проверь вот этот. А если и он не подошел, то вот этот...».

### Аналогия из жизни: Светофор 🚦
Представь, что ты пишешь автопилот для Tesla.
1. **Если** горит красный — стоять.
2. **Иначе если** (`elif`) горит желтый — приготовиться.
3. **Иначе** (`else`) — ехать (подразумеваем зеленый).

### Как это выглядит в коде:

```python
signal = input("Какой цвет светофора? (красный/желтый/зеленый): ")

if signal == "красный":
    print("Стоп! Двигаться нельзя.")
elif signal == "желтый":
    print("Внимание! Готовься к старту.")
elif signal == "зеленый":
    print("Поехали!")
else:
    print("Светофор сломан, действуй по знакам!")
```

**Важно:**
*   Python проверяет условия сверху вниз.
*   Как только он находит **первое** верное условие, он выполняет код внутри него и **пропускает** остальные проверки в этой цепочке.
*   Ты можешь написать сколько угодно `elif`, но `else` всегда ставится в самом конце (и он необязателен).

---

## Часть 2: Логические операторы — Суперклей для условий

Иногда одного условия мало. Тебе нужно проверить сразу несколько факторов.
*   *Чтобы зайти в соцсеть:* Логин верный **И** Пароль верный.
*   *Чтобы пойти гулять:* Сделал уроки **ИЛИ** помыл посуду.

Для этого в Python есть три кита логики: **`and`**, **`or`**, **`not`**.

### 1. Оператор `and` (Строгий вахтёр)
Возвращает `True` (правду), только если **ОБА** условия верны.

```python
login = "admin"
password = "123"

if login == "admin" and password == "123":
    print("Доступ разрешен!")
else:
    print("Ошибка входа.")
```
*Если хоть одно условие неверно — вся конструкция ломается.*

### 2. Оператор `or` (Добрый друг)
Возвращает `True`, если **ХОТЯ БЫ ОДНО** из условий верно. Ему не важно, оба ли правы, главное, чтобы не все ошиблись.

```python
has_ticket = False
has_vip_pass = True

if has_ticket or has_vip_pass:
    print("Проходите в кинозал.")
else:
    print("Вам нужно купить билет.")
```

### 3. Оператор `not` (Бунтарь)
Он просто переворачивает значение. Делает из правды ложь, а из лжи — правду.

```python
is_game_over = False

if not is_game_over:
    print("Игра продолжается! Бей монстров!")
```
*Здесь мы говорим: «Если игра НЕ закончена, то...»*

---

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

Давай напишем код, который похож на реальные задачи.

### Пример 1: Фейс-контроль в клубе (Сложная логика)
Представь, что ты пишешь бота-охранника. Правила такие:
1. Вход строго с 18 лет.
2. Но если ты с родителями, можно с 14.
3. Если ты в "черном списке", тебя не пустят в любом случае.

```python
age = 16
with_parents = True
is_banned = False

# Сначала проверяем самое строгое условие - бан
if is_banned:
    print("Вам вход запрещен навсегда.")
# Затем сложная проверка возраста и родителей
elif age >= 18 or (age >= 14 and with_parents):
    print("Добро пожаловать в клуб!")
else:
    print("Извини, ты еще слишком молод.")
```

**Разбор:** Обрати внимание на скобки `(age >= 14 and with_parents)`. Они работают как в математике — сначала выполняется действие в скобках. Это делает код читаемым и предсказуемым.

### Пример 2: Выбор подарка (Цепочка elif)
Напишем программу-помощника, которая советует, что подарить другу, в зависимости от бюджета.

```python
budget = int(input("Сколько у тебя денег (в рублях)? "))

if budget >= 20000:
    print("Подари игровую приставку или смартфон.")
elif budget >= 5000:
    print("Хорошие наушники или брендовая толстовка — отличный выбор.")
elif budget >= 1000:
    print("Книга, настольная игра или билет в кино.")
elif budget > 0:
    print("Купи вкусную шоколадку и нарисуй открытку!")
else:
    print("Бюджет не может быть отрицательным, ты же не хочешь забрать у друга деньги?")
```

**Почему порядок важен?**
Если бы мы поставили проверку `budget >= 1000` самой первой, то при бюджете 25000 программа сказала бы "Купи книгу", потому что 25000 больше 1000. Python выполнил бы первое условие и вышел. **Всегда проверяй от частного к общему (или от большего к меньшему)!**

---

## 💡 Интересные факты

1.  **Ленивый Python:** Python использует так называемую «ленивую оценку» (short-circuit evaluation). Если в конструкции `A and B` первое условие (`A`) ложно, Python даже не будет проверять `B`, потому что результат уже точно будет ложным. Это экономит ресурсы компьютера!
2.  **Джордж Буль:** Вся эта логика (`True`/`False`, `and`/`or`) называется **Булевой алгеброй**. Она названа в честь математика Джорджа Буля, который придумал её еще в 19 веке, задолго до появления первого компьютера. Он и представить не мог, что на его идеях будет работать TikTok и YouTube.

---

## Ключевые моменты (Запомни это!)

*   **`elif`** позволяет создавать многоступенчатые проверки. Используй его, когда вариантов больше двух (утро, день, вечер).
*   **`and`** требует, чтобы **всё** было правдой.
*   **`or`** доволен, если **хотя бы одно** условие правдиво.
*   **`not`** инвертирует (переворачивает) логику.
*   **Порядок имеет значение:** В цепочке `if-elif-elif` срабатывает только первый подходящий блок. Располагай условия логично!

### 💻 Домашнее задание для тренировки
Попробуй написать программу «Оценка за четверть».
*   Пользователь вводит свой средний балл.
*   Если балл >= 4.5 — выведи "Отлично! Твердая 5".
*   Если балл от 3.5 до 4.5 — "Хорошо, это 4".
*   Если балл от 2.5 до 3.5 — "Удовлетворительно, это 3".
*   Иначе — "Нужно подтянуть знания, пока это 2".

Удачи в коде! 🚀
Copied to clipboard!