Приветствую, давай рассмотрим if и else в Python. Условные операторы if и else в Python позволяют программе принимать решения. Блок if выполняет код, если условие истинно, а else если оно ложно. Ключевой особенностью синтаксиса являются отступы, которые определяют, какой код относится к какому условию, в отличие от фигурных скобок в других языках. Материал в статье представлен в видеоформате с ментором Python университета JavaRush и более подробно в текстовой версии.

Помните, как вы первый раз пришли на новую работу? Заходите, а HR такой: "Если у тебя есть пропуск, иди налево к лифтам, если нет, топай направо к ресепшену". Вот это и есть условные операторы в программировании! Они дают твоему коду мозги, чтобы он мог решать, что делать, в зависимости от ситуации.

if и else в Python это как руль для машины. Без них твой код это просто тачка, которая едет только прямо и никуда не сворачивает. В этой статье я разберу if, else по косточкам: от самых простых случаев до всяких хитростей, которые юзают продвинутые кодеры.

Этот гайд подойдет и тем, кто только начинает ковыряться в Python, и тем, кто уже что-то умеет, но хочет подтянуть знания или найти новые фишки для своих задач.

Видеоформат Часть 1:

Кратко

  • if выполняет блок, когда условие истинно, else когда ложно. Третье слово, elif, проверяет следующее условие, если предыдущее не сработало.
  • Границы блока задают отступы, а не фигурные скобки: сдвинутая строка это уже другой блок.
  • В условии не обязательно писать сравнение: Python сам приводит значение к истине или лжи, и пустая строка, ноль, пустой список считаются ложью.
  • Условия объединяют через and, or и not, причем вычисление обрывается, как только результат ясен.
  • Для простого выбора из двух значений есть однострочная запись: status = "adult" if age >= 18 else "minor".
  • Две самые частые ошибки новичка это забытый отступ и знак = вместо ==.

Что такое условные операторы в Python?

Условные операторы в Python это как развилки на дороге: программа смотрит на условие и решает, куда ей дальше. Представьте, что вы пишете приложение для доставки еды. Если заказ сделан до десяти вечера, принимаем, а если уже ночь на дворе выводим: "Сори, кухня закрыта".

В Python для этого есть три главных слова:

if: проверяет, правда ли условие, и если да, то делает, что сказано.

else: срабатывает, когда в if все ложь.

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

Кстати, в Python есть одна фишка, которая вначале бесила: отступы. Это не просто для красоты: они реально решают, какой код к какому if относится. В других языках для этого фигурные скобки используют, а тут пробелы. Помню, как я разок забыл отступ, и программа выдала такую дичь, что я час сидел и не мог разобраться.

Python
if условие:
    # Этот код выполнится, если условие истинно
    pass

Синтаксис и базовый пример if-оператора

Начнем с простейшего примера. Допустим, вы создаете программу для банка, которая проверяет, может ли клиент снять деньги с карты:

Python
balance = 1500
withdrawal = 1000

if balance >= withdrawal:
    print("Операция разрешена. Выдаем деньги")
    balance = balance - withdrawal
    print(f"Остаток на счете: {balance}")

В этом примере программа проверяет, достаточно ли денег на счете. Если условие balance >= withdrawal истинно, выполняется код в блоке с отступом.

Важный момент: Python использует концепцию "truthiness" и "falsiness". Некоторые значения считаются ложными даже без явного сравнения:

Python
# Ложные значения (falsy)
if 0:
    print("Не выполнится")

if "":
    print("Пустая строка - тоже не выполнится")

if []:
    print("Пустой список - не выполнится")

# Истинные значения (truthy)
if 1:
    print("Выполнится!")

if "Привет":
    print("Непустая строка - выполнится!")

if [1, 2, 3]:
    print("Непустой список - выполнится!")

Список ложных значений в Python короткий, и его проще один раз запомнить целиком. Ложью считается только вот это:

Значение Что это
False сам логический ноль
None отсутствие значения
0, 0.0 нулевые числа любого типа
"" пустая строка
[] пустой список
() пустой кортеж
{} пустой словарь
set() пустое множество

Все остальное истинно, включая строку из одного пробела, строку "0" и список [0]: они непустые, а значит для if истинны. Полное правило описано в документации Python.

If...Else: Двустороннее принятие решений

В реальной жизни у нас редко бывает только один вариант развития событий. Обычно есть план А и план Б. То же самое в программировании: часто нужно предусмотреть альтернативу.

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

Python
balance = 500
withdrawal = 1000

if balance >= withdrawal:
    print("Операция разрешена. Выдаем деньги")
    balance = balance - withdrawal
else:
    print("Недостаточно средств на счете")
    print(f"Ваш баланс: {balance}, запрошенная сумма: {withdrawal}")

Блок else выполняется только тогда, когда условие в if оказывается ложным. Это гарантирует, что программа обработает любую ситуацию.

Практический пример: проверка возраста для покупки алкоголя:

Python
age = int(input("Введите ваш возраст: "))

if age >= 21:
    print("Добро пожаловать! Вы можете совершить покупку")
else:
    print("Извините, продажа алкоголя лицам младше 21 года запрещена")
Видеоформат Часть 2:

Вложенные If-операторы

Иногда логика программы требует проверки условий внутри других условий. Это как матрешка: условие внутри условия. Вложенные if Python позволяют создавать сложную логику.

Пример: система скидок в интернет-магазине:

Python
customer_type = "premium"
order_amount = 150
is_birthday = True

if customer_type == "premium":
    print("Клиент категории Premium")
    
    if order_amount >= 100:
        discount = 0.15  # 15% скидка
        print("Применена скидка 15% за крупную покупку")
        
        if is_birthday:
            discount += 0.05  # дополнительная скидка в день рождения
            print("Дополнительная скидка 5% в честь дня рождения!")
    else:
        discount = 0.10  # 10% скидка для премиум-клиентов
        print("Применена скидка 10% для Premium-клиента")
        
else:
    if order_amount >= 200:
        discount = 0.05  # 5% скидка для крупных заказов
        print("Применена скидка 5% за крупную покупку")
    else:
        discount = 0  # без скидки
        print("Скидка не применяется")

final_amount = order_amount * (1 - discount)
print(f"К оплате: {final_amount:.2f} руб.")

Однако будьте осторожны: слишком глубокая вложенность делает код сложным для понимания. Если вложенность превышает 3-4 уровня, стоит подумать о рефакторинге кода.

Логические операторы в условных конструкциях

Логические операторы Python позволяют объединять несколько условий в одном выражении. Это как составление сложных предложений в русском языке с союзами "и", "или", "не".

Оператор AND

Оператор and возвращает True только когда ОБА условия истинны:

Python
username = "admin"
password = "secret123"
is_logged_in = False

if username == "admin" and password == "secret123":
    is_logged_in = True
    print("Добро пожаловать в систему!")
else:
    print("Неверные учетные данные")

Оператор OR

Оператор or возвращает True, если истинно ХОТЯ БЫ одно условие:

Python
day = "Saturday"
is_holiday = True

if day == "Saturday" or day == "Sunday" or is_holiday:
    print("Сегодня выходной!")
else:
    print("Рабочий день")

Оператор NOT

Оператор not инвертирует значение условия:

Python
email = "user@example.com"
is_valid_email = "@" in email and "." in email

if not is_valid_email:
    print("Введите корректный email адрес")
else:
    print("Email принят")

Короткозамкнутое вычисление (Short-circuit evaluation)

Python умен и не проверяет второе условие, если результат уже ясен из первого. Это экономит время выполнения:

Python
x = 0
y = 10

# Python не будет проверять y > 5, потому что x уже равно 0
if x > 0 and y > 5:
    print("Оба условия истинны")

# Python не будет проверять второе условие, потому что первое уже истинно
if x == 0 or y > 100:
    print("Хотя бы одно условие истинно")

Однострочные If и тернарный оператор Python

Для простых условий Python предлагает компактный синтаксис. Тернарный оператор Python позволяет записать условие в одну строку:

Python
# Обычная запись
age = 20
if age >= 18:
    status = "adult"
else:
    status = "minor"

# Тернарный оператор (однострочный if Python)
status = "adult" if age >= 18 else "minor"
print(status)  # adult

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

Использование If с циклами и функциями

Условные операторы Python часто работают в связке с циклами и функциями, создавая мощные инструменты для обработки данных.

If с циклами

Python
# Фильтрация списка email адресов
emails = ["user@example.com", "invalid-email", "admin@site.org", "", "test@domain.com"]
valid_emails = []

for email in emails:
    if "@" in email and "." in email and len(email) > 5:
        valid_emails.append(email)
    else:
        print(f"Пропущен некорректный email: {email}")

print("Валидные email адреса:", valid_emails)

# Поиск в списке с условием
products = [
    {"name": "iPhone", "price": 80000, "category": "phones"},
    {"name": "MacBook", "price": 150000, "category": "laptops"},
    {"name": "Samsung Galaxy", "price": 60000, "category": "phones"}
]

print("Телефоны дешевле 70000:")
for product in products:
    if product["category"] == "phones" and product["price"] < 70000:
        print(f"- {product['name']}: {product['price']} руб.")

If внутри функций

Python
def grade_students(students_scores):
    """Функция для выставления оценок студентам"""
    graded_students = []

    for student, score in students_scores.items():
        if score >= 90:
            grade = "A"
            status = "Отличник"
        elif score >= 80:
            grade = "B"
            status = "Хорошист"
        elif score >= 70:
            grade = "C"
            status = "Троечник"
        else:
            grade = "F"
            status = "Требуется пересдача"

        graded_students.append({
            "name": student,
            "score": score,
            "grade": grade,
            "status": status
        })

    return graded_students

# Использование функции
scores = {
    "Анна": 95,
    "Иван": 78,
    "Мария": 88,
    "Петр": 65
}

results = grade_students(scores)
for student in results:
    print(f"{student['name']}: {student['score']} баллов - {student['grade']} ({student['status']})")

Обратите внимание на цепочку elif: она проверяет условия по очереди и останавливается на первом подошедшем. Если бы мы вкладывали else друг в друга, код уехал бы вправо на три уровня отступов и читался бы заметно хуже.

Частые ошибки и как их избежать

За годы обучения программированию на Python я видел одни и те же ошибки у новичков. Вот самые распространенные из них:

1. Неправильные отступы

Python
# НЕПРАВИЛЬНО
if 5 > 3:
print("Это вызовет ошибку IndentationError")

# ПРАВИЛЬНО
if 5 > 3:
    print("Теперь все работает")

2. Использование = вместо ==

Python
# НЕПРАВИЛЬНО - присваивание вместо сравнения
x = 10
if x = 5:  # SyntaxError!
    print("Ошибка")

# ПРАВИЛЬНО
if x == 5:
    print("Правильное сравнение")

3. Сложные вложенные условия

Python
# ПЛОХО - трудно читать и понимать
if user.is_authenticated():
    if user.has_permission('read'):
        if document.is_available():
            if user.subscription.is_active():
                if not document.is_private() or user.id == document.owner_id:
                    return document.content

# ЛУЧШЕ - используйте функции для разбиения логики
def can_access_document(user, document):
    if not user.is_authenticated():
        return False
    
    if not user.has_permission('read'):
        return False
    
    if not document.is_available():
        return False
    
    if not user.subscription.is_active():
        return False
    
    if document.is_private() and user.id != document.owner_id:
        return False
    
    return True

if can_access_document(user, document):
    return document.content

4. Неправильное понимание truthy/falsy

Python
# Потенциальная ошибка
items = []
if items:  # Пустой список - falsy
    print("У нас есть товары")
else:
    print("Товаров нет")  # Выполнится это

# Более явная проверка
if len(items) > 0:
    print("У нас есть товары")
else:
    print("Товаров нет")

Заключение

if и else в Python это как основа основ, без них ни один проект не взлетит. Мы прошлись по всему, что нужно знать про условные операторы: от простого if до всяких замороченных вложенных конструкций и хитрых тернарных операторов.

Вот что стоит заучить:

  • Отступы это святое в Python, не лажайте с пробелами.
  • Юзайте and, or, not, чтобы склеивать условия.
  • Не забывайте про штуки типа truthy и falsy: они реально выручают.
  • Не закапывайтесь в кучу вложенных условий, а то код станет как лабиринт.
  • Тернарный оператор это как лайфхак для простых проверок.

Теперь пора засунуть руки в код! Напишите свою программку с if и else. Начните с чего-то легкого, типа проверки возраста для входа в клуб, а потом усложняйте. Я сам так учился: писал простенькие штуки, ломал их, психовал, но в итоге все в голове уложилось.

Если вы только начинаете кодить, не зацикливайтесь только на условиях. Погрузитесь в циклы, функции, списки, словари, это все база. А если хотите реально прокачаться в Python и стать профи, зацените интерактивный курс на JavaRush. Там куча задачек и проектов, которые прям вдалбливают материал.

А для тех, кто мечтает сделать кодинг своей профессией и быстро вырасти до миддла, гляньте Python-университет от JavaRush. Это прям убойная программа с менторами, которая за 12 месяцев превратит вас в полноценного специалиста.

Удачи в кодинге! Помните: без практики все это просто слова.

Вопросы и ответы

Как работает оператор if else в Python?

Python вычисляет условие после слова if и приводит результат к истине или лжи. Если получилась истина, выполняется блок с отступом под if, а блок под else пропускается. Если ложь, наоборот. Блок else необязателен: без него при ложном условии программа просто идет дальше.

Почему в Python так важны отступы?

Потому что они и есть границы блока: в других языках эту роль играют фигурные скобки, а здесь пробелы. Строка с отступом относится к условию, строка без отступа выполняется всегда. Если отступ забыть, программа даже не запустится: вы получите IndentationError: expected an indented block after "if" statement. Стандарт PEP 8 рекомендует четыре пробела на уровень.

Какие значения Python считает ложными?

Всего восемь случаев: False, None, ноль любого числового типа, пустая строка, пустой список, кортеж, словарь и множество. Все остальное истинно. Отсюда популярная ловушка: строка из одного пробела и строка "0" непустые, поэтому условие с ними сработает.

Чем отличается = от == в условии?

Один знак равенства это присваивание, два это сравнение. В условии нужно сравнение, и если ошибиться, Python не запустит файл, а подскажет прямым текстом: SyntaxError: invalid syntax. Maybe you meant "==" or ":=" instead of "="?. Упомянутый в подсказке := это отдельный оператор, который позволяет прямо в условии присвоить значение и сразу его проверить.

Как записать if и else в одну строку?

Через условное выражение, его же называют тернарным оператором: сначала пишут значение для истинного случая, потом слово if с условием, потом слово else и значение для ложного случая. Например: status = "adult" if is_adult else "minor". Подходит такая запись только для коротких проверок: в сложной логике она быстро становится нечитаемой.

Как проверить несколько условий сразу?

Объединить их операторами and (нужны оба условия), or (достаточно одного) и not (отрицание). Python вычисляет такие выражения лениво: в and он не станет проверять второе условие, если первое ложно, а в or не станет, если первое истинно. На этом основан частый прием: сначала проверяют, что объект существует, и только потом обращаются к его данным.