Перейти к содержимому
Editor

Условия if-else в Python: elif, вложенные if и тернарный оператор

Начальный25 min6 упр.70 XP

Этот урок переведён с английского оригинала.Read in EnglishLeer en españolСообщить об ошибке в переводе

0/6 упр.

Каждый день вы принимаете сотни решений. Если идёт дождь, вы берёте зонт. Если на светофоре красный, вы останавливаетесь. Если заряд телефона ниже 20%, вы ищете зарядку. Всё это решения по условию: вы что-то проверяете и действуете в зависимости от результата.

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

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

Как работает инструкция if в Python?

Инструкция if представляет собой самый простой способ принять решение. Она проверяет условие. Если условие равно True, выполняется код с отступом под ней. Если условие равно False, Python полностью пропускает этот код.

Простая инструкция if
temperature = 35
if temperature > 30:
print('It\'s hot outside!')
print('Stay hydrated.')
print('Have a great day!')
Вывод
It's hot outside!
Stay hydrated.
Have a great day!

Обратите внимание на структуру. После ключевого слова if идёт условие (temperature > 30), а затем двоеточие (:). Строки под ним записаны с отступом: так Python понимает, какой код относится к блоку if. Последняя строка выполняется в любом случае, потому что у неё нет отступа под if.

Попробуйте изменить температуру в коде выше на 25 и запустить его ещё раз. Две строки о жаре исчезнут, но «Have a great day!» вы по-прежнему увидите, потому что эта строка находится вне блока if.


Добавляем else: что происходит, когда условие ложно?

Одна инструкция if может либо что-то сделать, либо ничего не делать. Но часто нужно сделать одно, когда условие истинно, и что-то другое, когда оно ложно. Для этого и нужен else.

if-else: два возможных пути
age = 15
if age >= 18:
print('You can vote!')
else:
print('You\'re too young to vote.')
years_left = 18 - age
print(f'Come back in {years_left} years.')
Вывод
You're too young to vote.
Come back in 3 years.

Представьте if-else как развилку на дороге. Python всегда идёт либо по одной дороге, либо по другой: никогда по обеим сразу и никогда ни по одной. Каждый раз выполняется ровно один блок.

Без else: две отдельные проверки
score = 85

if score >= 60:
    print('You passed!')
if score < 60:
    print('You failed.')
С else: чище и надёжнее
score = 85

if score >= 60:
    print('You passed!')
else:
    print('You failed.')

Вариант с else лучше по двум причинам. Во-первых, он короче и легче читается. Во-вторых, в нём невозможно случайно выполнить оба блока или ни одного. С двумя отдельными инструкциями if одна опечатка во втором условии может привести к ошибкам.


Как работает elif, когда условий несколько?

А если вариантов больше двух? Представьте, что вы ставите оценки за контрольную: A, B, C, D или F. Пять исходов не обработать одними if и else. Здесь на помощь приходит elif (сокращение от «else if», «иначе если»).

Цепочки elif для нескольких условий
score = 82
if score >= 90:
grade = 'A'
elif score >= 80:
grade = 'B'
elif score >= 70:
grade = 'C'
elif score >= 60:
grade = 'D'
else:
grade = 'F'
print(f'Score: {score}, Grade: {grade}')
Вывод
Score: 82, Grade: B

Python проверяет условия сверху вниз. Как только он находит условие, равное True, он выполняет этот блок и пропускает всё, что ниже. Если ни одно условие не подошло, выполняется блок else, который служит страховкой.

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


Вложенные инструкции if: условия внутри условий

Иногда второе условие нужно проверять, только если выполнено первое. Например, на аттракционе в парке сначала проверяют ваш рост, а потом возраст. Инструкцию if можно поместить внутрь другой инструкции if, это называется вложенностью.

Вложенные инструкции if
has_ticket = True
age = 14
if has_ticket:
if age >= 12:
print('Welcome to the ride!')
else:
print('Sorry, you must be 12 or older.')
else:
print('You need a ticket first.')
Вывод
Welcome to the ride!

Внутренний if выполняется, только когда внешний if равен True. Обратите внимание, как растёт отступ: каждый уровень вложенности добавляет ещё один уровень отступа.

Глубокая вложенность: читать труднее
if has_ticket:
    if age >= 12:
        if height >= 120:
            print('Welcome!')
Объединённые условия: чище
if has_ticket and age >= 12 and height >= 120:
    print('Welcome!')

Тернарный оператор в Python: if-else в одну строку

Бывает, что простой if-else лишь присваивает значение. Для этого в Python есть сокращённая запись, которая называется тернарным оператором (или условным выражением). Она умещает весь if-else в одну строку.

Тернарный оператор: if-else в одну строку
age = 20
# Regular if-else
if age >= 18:
status = 'adult'
else:
status = 'minor'
print(status)
# Same thing with ternary operator
status = 'adult' if age >= 18 else 'minor'
print(status)
Вывод
adult
adult

Синтаксис такой: value_if_true if condition else value_if_false. Читается почти как обычная фраза: «status равен 'adult', если age не меньше 18, иначе 'minor'».

Тернарный оператор на практике
# Ternary works great in print statements and f-strings
temperature = 28
print(f'Wear a {"coat" if temperature < 15 else "t-shirt"} today.')
# And for quick calculations
x = -5
absolute = x if x >= 0 else -x
print(f'Absolute value of {x} is {absolute}')
Вывод
Wear a t-shirt today.
Absolute value of -5 is 5

Частые ошибки в if-else

Вот ошибки, которые новички чаще всего допускают в условных инструкциях. Научитесь узнавать их, и вы сэкономите себе часы отладки.

Частая ошибка: or с несколькими значениями
# Bug: wrong comparison for multiple values
color = 'red'
# This does NOT work as expected
if color == 'red' or 'blue':
print('This always runs!') # Always True!
# This is correct
if color == 'red' or color == 'blue':
print('Red or blue!')
# Even cleaner with "in"
if color in ('red', 'blue', 'green'):
print('Primary color!')
Вывод
This always runs!
Red or blue!
Primary color!

Упражнения для практики

Пора потренироваться! Упражнения идут от простых инструкций if к более сложной условной логике. Попробуйте решить каждое, прежде чем смотреть подсказки.

Упражнение 1: чётное или нечётное
Напишите код

Напишите программу, которая проверяет, чётное число или нечётное. Дана переменная number со значением 7.

Выведите "even", если число чётное, или "odd", если нечётное.

Ожидаемый вывод:

odd

Подсказка: число чётное, если number % 2 == 0 (остаток от деления на 2 равен нулю).

number = 7
# Check if the number is even or odd
Упражнение 2: советы по погоде
Напишите код

Напишите программу, которая советует, что надеть, в зависимости от температуры. Дана переменная temp со значением 22.

Правила:

  • Если temp равна 30 или выше, выведите "Wear shorts"
  • Если temp равна 20 или выше (но ниже 30), выведите "Wear a t-shirt"
  • Если temp равна 10 или выше (но ниже 20), выведите "Wear a jacket"
  • Если ниже 10, выведите "Wear a coat"
  • Ожидаемый вывод:

    Wear a t-shirt
    temp = 22
    # Give clothing advice based on temperature
    Упражнение 3: предскажите вывод
    Угадайте вывод

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

    Хорошо подумайте, какие условия равны True, а какие False.

    x = 15
    if x > 20:
    print('A')
    elif x > 10:
    print('B')
    elif x > 5:
    print('C')
    else:
    print('D')
    print('Done')
    Упражнение 4: исправьте подсчёт оценки
    Исправьте ошибку

    В этой программе подсчёта оценки есть ошибка. Любой балл получает оценку «D», даже когда должна быть «A», «B» или «C». Исправьте цепочку elif, чтобы она работала правильно.

    Ожидаемый вывод при score = 85:

    Grade: B
    score = 85
    if score >= 60:
    grade = 'D'
    elif score >= 70:
    grade = 'C'
    elif score >= 80:
    grade = 'B'
    elif score >= 90:
    grade = 'A'
    else:
    grade = 'F'
    print(f'Grade: {grade}')
    Упражнение 5: цена билета через тернарный оператор
    Напишите код

    Билет в кинотеатр стоит $12 для взрослых (от 18 лет) и $8 для детей (младше 18). С помощью тернарного оператора задайте цену в одну строку, а затем выведите её.

    Дана переменная age со значением 14.

    Ожидаемый вывод:

    Ticket price: $8
    age = 14
    # Use a ternary operator to set the price
    price = # your code here
    print(f'Ticket price: ${price}')
    Упражнение 6: проверка входа
    Напишите код

    Напишите проверку входа в систему. Даны две переменные: username и password.

    Правила:

  • Если username равно "admin" и password равно "secret123", выведите "Welcome, admin!"
  • Если username равно "admin", но пароль неверный, выведите "Wrong password"
  • Для любого другого имени пользователя выведите "User not found"
  • Ожидаемый вывод при username = "admin", password = "wrong":

    Wrong password
    username = 'admin'
    password = 'wrong'
    # Write the login validation logic

    Итоги: инструкции if-else в Python

    Вот всё, что вы узнали об условиях в Python:

    ПонятиеСинтаксисНазначение
    ifif condition:Выполнить код, если условие равно True
    elseelse:Выполнить код, если условие if равно False
    elifelif condition:Проверить дополнительные условия
    Вложенный ifif внутри ifМногоуровневые решения
    Тернарный операторx if cond else yif-else в одну строку для простых значений

    Главные правила:

  • Каждая строка с if, elif и else заканчивается двоеточием (:)
  • Код внутри блока должен быть с отступом
  • В цепочке elif Python останавливается на первом условии, равном True
  • Для сравнения используйте ==, а не = (это присваивание)
  • В цепочках elif ставьте самое строгое условие первым
  • Что дальше?

    Теперь, когда вы умеете принимать решения, пора научить программы повторять действия. В следующем уроке, [Цикл for в Python](/python/python-for-loops), вы узнаете, как перебирать списки, диапазоны и строки, чтобы обрабатывать данные, не переписывая один и тот же код снова и снова.

    Похожие уроки

    Урок был полезен?