Python If Elif Else: синтаксис, примеры и лучшие практики

0
57

Памятка: ключевые моменты по if elif else

  1. Проверяйте порядок условий: от более конкретных к общим.
  2. Используйте elif вместо нескольких if для взаимоисключающих условий.
  3. Не забывайте двоеточие после каждого условия.
  4. Соблюдайте отступы (4 пробела) для блоков кода.
  5. Избегайте избыточных elif, если можно использовать словарь или match-case.
  6. Применяйте тернарный оператор только для простых выражений.
  7. Используйте логические операторы для объединения условий.
  8. Всегда добавляйте else для обработки неучтенных случаев.
  9. Тестируйте граничные случаи (пустые строки, нули, None).
  10. Для сложной логики выносите условия в отдельные функции.
  11. Помните, что match-case читается лучше при множестве вариантов.
  12. Избегайте глубокой вложенности (более 3 уровней).

Условные операторы if…elif…else в Python

Урок 24 - изображение номер один
Урок 24 — изображение номер один

Представьте себе обычный светофор. Красный — стоим, жёлтый — собираемся с силами, зелёный — поехали. Условные конструкции в Python работают по такой же логике: проверяем состояние и отправляем программу по нужной дорожке.

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

Синтаксис if…elif…else

101-2562-Python: 3 - изображение номер два
101-2562-Python: 3 — изображение номер два

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

Главное правило Python — отступы! Каждый блок кода после двоеточия должен быть отступлен на 4 пробела. Это не просто стиль, это синтаксическое требование.

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

The if-elif-else - изображение номер три
The if-elif-else — изображение номер три

Как работает if…elif…else

#15 - изображение номер четыре
#15 — изображение номер четыре

Тут есть важный нюанс, который многие упускают в начале изучения Python. Условные операторы работают по принципу «первый подходящий выигрывает».

Вспомните автомат с напитками. Вы нажимаете кнопку, и автомат проверяет: есть ли этот напиток? Если да — выдает его. Если нет — проверяет следующий вариант. Как только находит подходящий — останавливается.

В этом примере, если у студента 85 баллов, Python сначала проверит, больше ли оценка 90 (нет), потом — больше ли 75 (да!). Как только условие выполнится, остальные elif и else проверяться не будут.

  • elif проверяет новое условие
  • else срабатывает, если ВСЕ предыдущие условия оказались ложными

temperature = 15 if temperature > 25: print(«Надеваю шорты и футболку») elif temperature > 15: print(«Джинсы и легкая куртка») elif temperature > 0: print(«Теплая куртка и шапка») else: print(«Зимняя куртка, шапка и перчатки»)

Таблица №1

Конструкция Когда выполняется Количество в коде
if Когда условие истинно Обязательно 1
elif Когда предыдущие условия ложны, а текущее истинно 0 или больше
else Когда все предыдущие условия ложны 0 или 1

Вложенные условные конструкции

Python if else elif - изображение номер пять
Python if else elif — изображение номер пять

Иногда жизнь сложнее, чем простая последовательность проверок. Представьте ситуацию: вы проверяете возраст человека для входа в клуб. Если ему больше 18 — пускаете. Но если ему больше 21, то еще и разрешаете алкоголь.

age = 25 if age >= 18: print(«Добро пожаловать в клуб!») if age >= 21: print(«Можете заказывать алкогольные напитки») else: print(«Алкоголь запрещен») else: print(«Извините, вход только с 18 лет»)

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

user_role = «admin» user_active = True if user_active: print(«Пользователь активен») if user_role == «admin»: print(«Полный доступ к системе») elif user_role == «moderator»: print(«Доступ к модерации контента») else: print(«Базовый доступ») else: print(«Аккаунт заблокирован»)

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

Условный оператор if в python - изображение номер шесть
Условный оператор if в python — изображение номер шесть

Помню случай из практики: нужно было проверить, может ли человек взять кредит. Условия были простые — возраст от 21 до 65 лет И зарплата больше 30000. Тут как раз пригодились логические операторы Python.

  • and — «И» (все условия должны быть истинными)
  • or — «ИЛИ» (хотя бы одно условие должно быть истинным)
  • not — «НЕ» (инвертирует результат)
ЧИТАТЬ ТАКЖЕ:  Реальные сроки и стратегии: сколько времени нужно, чтобы выучить Python

hour = 14 day = «понедельник» if (hour >= 9 and hour <= 18) and (day!= «суббота» and day!= «воскресенье»): print(«Служба поддержки работает») else: print(«Служба поддержки не работает»)

weather = «дождь» if weather == «дождь» or weather == «снег» or weather == «град»: print(«Лучше остаться дома») else: print(«Хорошая погода для прогулки»)

Оператор or#

Условный оператор if - изображение номер семь
Условный оператор if — изображение номер семь

or
Важная особенность работы оператора — операнды, которые находятся после истинного, не вычисляются:

In: » or sorted([44, 1, 67]) Out[33]: [1, 44, 67] In: » or ‘string1’ or sorted([44, 1, 67]) Out[34]: ‘string1’

Тернарные выражения и компактный if

How the if - изображение номер восемь
How the if — изображение номер восемь

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

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

Распространенные ошибки и лучшие практики

How to - изображение номер девять
How to — изображение номер девять

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

Неправильный порядок условий

Learn - изображение номер десять
Learn — изображение номер десять

score = 95 if score >= 65: print(«Оценка C») elif score >= 75: print(«Оценка B») elif score >= 90: print(«Оценка A») score = 95 if score >= 90: print(«Оценка A») elif score >= 75: print(«Оценка B») elif score >= 65: print(«Оценка C»)

Избыточное использование elif

if elif else - изображение номер одиннадцать
if elif else — изображение номер одиннадцать

Иногда студенты злоупотребляют elif там, где можно использовать словарь:

day = «понедельник» if day == «понедельник»: print(«Начало недели») elif day == «вторник»: print(«Вторник») elif day == «среда»: print(«Середина недели») day_messages = { «понедельник»: «Начало недели», «вторник»: «Вторник», «среда»: «Середина недели» } print(day_messages.get(day, «Неизвестный день»))

Оператор match-case в Python

Новый синтаксис match case в python 3 - изображение номер двенадцать
Новый синтаксис match case в python 3 — изображение номер двенадцать

Начиная с версии 3.10 в Питоне появился оператор match, который можно использовать как аналог оператора switch, который есть в других языках. На самом деле возможности match немного шире.

match имя_переменной: case значение_1: действия case значение_2: действия …

Слова match-case можно перевести как «соответствовать случаю». То есть, если значение переменной или выражения при match соответствует значению при каком-либо case, то выполнятся действия, вложенные в этот case.

В отличие от if-elif здесь нельзя использовать логические выражения. После case должен находится литерал, конкретное значение, выражение, возвращающее однозначный результат.

sign = input(‘Знак операции: ‘) a = int(input(‘Число 1: ‘)) b = int(input(‘Число 2: ‘)) match sign: case ‘+’: print(a + b) case ‘-‘: print(a — b) case ‘/’: if b!= 0: print(f'{a / b:.2f}’) case ‘*’: print(a * b) case _: print(‘Неверный знак операции’)

Здесь значение переменной sign проверяется не на вхождение в какой-либо диапазон, а на точное соответствие заданным строковым литералам. При этом в ветках case уже не надо писать sign == ‘+’ или sign == ‘-‘, как это пришлось бы делать в программе с if-elif:

if sign == ‘+’: print(a + b) elif sign == ‘-‘: print(a — b) elif sign == ‘/’: if b!= 0: print(f'{a / b:.2f}’) elif sign == ‘*’: print(a * b) else: print(‘Неверный знак операции’)

Оператор match языка Python не имеет ветки else. Вместо нее используется ветка case _.

При одном case через оператор | можно перечислять несколько значений. Если значение переменной соответствует хотя бы одному из них, тело этого case выполнится.

В коде выше с помощью функции eval() переданная ей строка выполняется как выражение. Например, если были введены числа 3, 5 и знак *, то получится строка «3 * 5». Вызов eval(«3 * 5») возвращает число 15.

  1. Напишите программу, которая запрашивает на ввод число. Если оно положительное, то на экран выводится цифра 1. Если число отрицательное, выводится -1. Если введенное число — это 0, то на экран выводится 0. Используйте в коде условный оператор множественного ветвления.
  2. Спишите вариант кода программы «про возраст» c if и тремя ветками elif из урока. Дополните его веткой else, обрабатывающие случаи, когда пользователь вводит числа не входящие в заданные четыре диапазона. Подумайте, почему в первой версии программы (когда использовались несвязанные друг с другом условные операторы) нельзя было использовать else, а для обработки не входящих в диапазоны случаев пришлось бы писать еще один if?
  3. Усовершенствуйте предыдущую программу, обработав исключение ValueError, возникающее, когда вводится не целое число.
ЧИТАТЬ ТАКЖЕ:  Python: установка зависимостей из requirements.txt с фото

Напишите программу, которая запрашивает на ввод число. Если оно положительное, то на экран выводится цифра 1. Если число отрицательное, выводится -1. Если введенное число — это 0, то на экран выводится 0. Используйте в коде условный оператор множественного ветвления.

Спишите вариант кода программы «про возраст» c if и тремя ветками elif из урока. Дополните его веткой else, обрабатывающие случаи, когда пользователь вводит числа не входящие в заданные четыре диапазона. Подумайте, почему в первой версии программы (когда использовались несвязанные друг с другом условные операторы) нельзя было использовать else, а для обработки не входящих в диапазоны случаев пришлось бы писать еще один if?

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

Практические задачи для закрепления

Master - изображение номер тринадцать
Master — изображение номер тринадцать

Теория без практики — как велосипед без колес. Попробуйте решить эти задачи самостоятельно:

Напишите программу, которая по введенному часу (от 0 до 23) определяет время суток:

  • 6-11: Утро
  • 12-17: День
  • 18-22: Вечер
  • 23-5: Ночь

Создайте функцию, которая проверяет, является ли число четным или нечетным, а также положительным, отрицательным или нулем.

  • 90-100: A
  • 80-89: B
  • 70-79: C
  • 60-69: D
  • Меньше 60: F

Решения попробуйте написать сначала сами, а потом сравните с готовыми вариантами в интернете.

True и False#

В Python, кроме очевидных значений True и False, всем остальным объектам также соответствует ложное или истинное значение:

  • истинное значение: любое ненулевое число любая непустая строка любой непустой объект
  • ложное значение: 0 None пустая строка пустой объект
  • любое ненулевое число
  • любая непустая строка
  • любой непустой объект
  • 0
  • None
  • пустая строка
  • пустой объект

Например, так как пустой список это ложное значение, проверить, пустой ли список, можно таким образом:

In: list_to_test = [1, 2, 3] In: if list_to_test:….: print(«В списке есть объекты»)….: В списке есть объекты

In: if len(list_to_test)!= 0:….: print(«В списке есть объекты»)….: В списке есть объекты

Операторы сравнения#

In: 5 > 6 Out[3]: False In: 5 > 2 Out[4]: True In: 5 < 2 Out[5]: False In: 5 == 2 Out[6]: False In: 5 == 5 Out[7]: True In: 5 >= 5 Out[8]: True In: 5 <= 10 Out[9]: True In: 8!= 10 Out[10]: True

In: a = 9 In: if a == 10:…: print(‘a равно 10’)…: elif a < 10:…: print(‘a меньше 10’)…: else:…: print(‘a больше 10’)…: a меньше 10

Оператор in#

Using the - изображение номер шестнадцать
Using the — изображение номер шестнадцать

in
Оператор позволяет выполнять проверку на наличие элемента в последовательности (например, элемента в списке или подстроки в строке):

При использовании со словарями условие in выполняет проверку по ключам словаря:

In: r1 = {….: ‘IOS’: ‘15.4’,….: ‘IP’: ‘10.255.0.1’,….: ‘hostname’: ‘london_r1’,….: ‘location’: ’21 New Globe Walk’,….: ‘model’: ‘4451’,….: ‘vendor’: ‘Cisco’} In: ‘IOS’ in r1 Out[16]: True In: ‘4451’ in r1 Out[17]: False

Операторы and, or, not#

and or not
В условиях могут также использоваться логические операторы,,:

In: r1 = {….: ‘IOS’: ‘15.4’,….: ‘IP’: ‘10.255.0.1’,….: ‘hostname’: ‘london_r1’,….: ‘location’: ’21 New Globe Walk’,….: ‘model’: ‘4451’,….: ‘vendor’: ‘Cisco’} In: vlan = [10, 20, 30, 40] In: ‘IOS’ in r1 and 10 in vlan Out[19]: True In: ‘4451’ in r1 and 10 in vlan Out[20]: False In: ‘4451’ in r1 or 10 in vlan Out[21]: True In: not ‘4451’ in r1 Out[22]: True In: ‘4451’ not in r1 Out[23]: True

Часто задаваемые вопросы об if elif else в Python

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

Вопрос: Можно ли использовать else без if?
Ответ: Нет, else всегда должен следовать за if или elif.

Вопрос: Сколько elif можно использовать в одной конструкции?
Ответ: Ограничений нет, но для читаемости рекомендуется не более 3-4.

Вопрос: Что произойдет, если ни одно условие не истинно и нет else?
Ответ: Ничего не произойдет, программа продолжит выполнение после конструкции.

Вопрос: Можно ли вкладывать if внутрь elif?
Ответ: Да, вложенные условные конструкции поддерживаются на любом уровне.

Вопрос: Как проверить несколько условий в одном if?
Ответ: Используйте логические операторы and, or, not.

Вопрос: Что такое тернарный оператор в Python?
Ответ: Это компактная запись if-else в одну строку: x if условие else y.

Вопрос: В чем отличие match-case от if-elif-else?
Ответ: match-case (Python 3.10+) предназначен для сопоставления с образцом, а if-elif-else — для проверки логических условий.

Вопрос: Как избежать ошибки IndentationError?
Ответ: Всегда используйте одинаковое количество пробелов (обычно 4) для каждого уровня вложенности.

Вопрос: Можно ли использовать if внутри списковых включений?
Ответ: Да, для фильтрации элементов: [x for x in list if условие].