Содержание
Памятка: ключевые моменты по if elif else
- Проверяйте порядок условий: от более конкретных к общим.
- Используйте elif вместо нескольких if для взаимоисключающих условий.
- Не забывайте двоеточие после каждого условия.
- Соблюдайте отступы (4 пробела) для блоков кода.
- Избегайте избыточных elif, если можно использовать словарь или match-case.
- Применяйте тернарный оператор только для простых выражений.
- Используйте логические операторы для объединения условий.
- Всегда добавляйте else для обработки неучтенных случаев.
- Тестируйте граничные случаи (пустые строки, нули, None).
- Для сложной логики выносите условия в отдельные функции.
- Помните, что match-case читается лучше при множестве вариантов.
- Избегайте глубокой вложенности (более 3 уровней).
Условные операторы if…elif…else в Python
Представьте себе обычный светофор. Красный — стоим, жёлтый — собираемся с силами, зелёный — поехали. Условные конструкции в Python работают по такой же логике: проверяем состояние и отправляем программу по нужной дорожке.
Как только появляется развилка, if-elif-else берёт управление на себя и помогает программе вести себя по-разному в каждой ситуации.
Синтаксис if…elif…else
Когда я только начинал программировать, меня удивило, как просто записывается логика принятия решений в Python. Синтаксис условных конструкций интуитивно понятен:
Главное правило Python — отступы! Каждый блок кода после двоеточия должен быть отступлен на 4 пробела. Это не просто стиль, это синтаксическое требование.
В этом примере Python проверяет условия последовательно. Сначала проверяет, больше ли число нуля. Если да — выводит соответствующее сообщение и завершает проверку. Если нет — переходит к следующему условию.
Как работает if…elif…else
Тут есть важный нюанс, который многие упускают в начале изучения 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 |
Вложенные условные конструкции
Иногда жизнь сложнее, чем простая последовательность проверок. Представьте ситуацию: вы проверяете возраст человека для входа в клуб. Если ему больше 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(«Аккаунт заблокирован»)
Логические операторы в условных конструкциях
Помню случай из практики: нужно было проверить, может ли человек взять кредит. Условия были простые — возраст от 21 до 65 лет И зарплата больше 30000. Тут как раз пригодились логические операторы Python.
- and — «И» (все условия должны быть истинными)
- or — «ИЛИ» (хотя бы одно условие должно быть истинным)
- not — «НЕ» (инвертирует результат)
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#
or
Важная особенность работы оператора — операнды, которые находятся после истинного, не вычисляются:
In: » or sorted([44, 1, 67]) Out[33]: [1, 44, 67] In: » or ‘string1’ or sorted([44, 1, 67]) Out[34]: ‘string1’
Тернарные выражения и компактный if
Когда у меня появилось больше опыта в Python, я узнал об элегантном способе записи простых условий в одну строку. Это называется тернарный оператор или условное выражение.
Тернарные выражения удобны для простых случаев, но не злоупотребляйте ими. Если логика сложная — лучше использовать обычный if.
Распространенные ошибки и лучшие практики
За годы обучения Python для начинающих я заметил несколько типичных ошибок, которые делают почти все новички.
Неправильный порядок условий
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
Иногда студенты злоупотребляют elif там, где можно использовать словарь:
day = «понедельник» if day == «понедельник»: print(«Начало недели») elif day == «вторник»: print(«Вторник») elif day == «среда»: print(«Середина недели») day_messages = { «понедельник»: «Начало недели», «вторник»: «Вторник», «среда»: «Середина недели» } print(day_messages.get(day, «Неизвестный день»))
Оператор match-case в Python
Начиная с версии 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. Если введенное число — это 0, то на экран выводится 0. Используйте в коде условный оператор множественного ветвления.
- Спишите вариант кода программы «про возраст» c if и тремя ветками elif из урока. Дополните его веткой else, обрабатывающие случаи, когда пользователь вводит числа не входящие в заданные четыре диапазона. Подумайте, почему в первой версии программы (когда использовались несвязанные друг с другом условные операторы) нельзя было использовать else, а для обработки не входящих в диапазоны случаев пришлось бы писать еще один if?
- Усовершенствуйте предыдущую программу, обработав исключение ValueError, возникающее, когда вводится не целое число.
Напишите программу, которая запрашивает на ввод число. Если оно положительное, то на экран выводится цифра 1. Если число отрицательное, выводится -1. Если введенное число — это 0, то на экран выводится 0. Используйте в коде условный оператор множественного ветвления.
Спишите вариант кода программы «про возраст» c if и тремя ветками elif из урока. Дополните его веткой else, обрабатывающие случаи, когда пользователь вводит числа не входящие в заданные четыре диапазона. Подумайте, почему в первой версии программы (когда использовались несвязанные друг с другом условные операторы) нельзя было использовать else, а для обработки не входящих в диапазоны случаев пришлось бы писать еще один if?
Усовершенствуйте предыдущую программу, обработав исключение ValueError, возникающее, когда вводится не целое число.
Практические задачи для закрепления
Теория без практики — как велосипед без колес. Попробуйте решить эти задачи самостоятельно:
Напишите программу, которая по введенному часу (от 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#
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 условие].






















