- if/elif/else#
- Условия#
- True и False#
- Операторы сравнения#
- Оператор in#
- Операторы and, or, not#
- Оператор and#
- Оператор or#
- Пример использования конструкции if/elif/else#
- Тернарное выражение (Ternary expression)#
- Тернарные операции в Python
- Тернарная условная операция
- Тернарные операторы в Python
- Заключение
- Тернарный оператор python elif
- # Table of Contents
- # If-Elif-Else statement on one line in Python
- # Using nested ternaries in Python
- # The equivalent of the nested ternary in an if-elif-else statement
- # Shorthand if-else statement in Python
if/elif/else#
Конструкция if/elif/else позволяет делать ответвления в ходе программы. Программа уходит в ветку при выполнении определенного условия.
В этой конструкции только if является обязательным, elif и else опциональны:
- Проверка if всегда идет первой.
- После оператора if должно быть какое-то условие: если это условие выполняется (возвращает True), то действия в блоке if выполняются.
- С помощью elif можно сделать несколько разветвлений, то есть, проверять входящие данные на разные условия.
- Блок elif это тот же if, но только следующая проверка. Грубо говоря, это «а если …»
- Блоков elif может быть много.
- Блок else выполняется в том случае, если ни одно из условий if или elif не было истинным.
In [1]: a = 9 In [2]: if a == 10: . : print('a равно 10') . : elif a 10: . : print('a меньше 10') . : else: . : print('a больше 10') . : a меньше 10
Условия#
Конструкция if построена на условиях: после if и elif всегда пишется условие. Блоки if/elif выполняются только когда условие возвращает True, поэтому первое с чем надо разобраться — это что является истинным, а что ложным в Python.
True и False#
В Python, кроме очевидных значений True и False, всем остальным объектам также соответствует ложное или истинное значение:
- истинное значение:
- любое ненулевое число
- любая непустая строка
- любой непустой объект
- 0
- None
- пустая строка
- пустой объект
Например, так как пустой список это ложное значение, проверить, пустой ли список, можно таким образом:
In [12]: list_to_test = [1, 2, 3] In [13]: if list_to_test: . : print("В списке есть объекты") . : В списке есть объекты
Тот же результат можно было бы получить несколько иначе:
In [14]: if len(list_to_test) != 0: . : print("В списке есть объекты") . : В списке есть объекты
Операторы сравнения#
Операторы сравнения, которые могут использоваться в условиях:
In [3]: 5 > 6 Out[3]: False In [4]: 5 > 2 Out[4]: True In [5]: 5 2 Out[5]: False In [6]: 5 == 2 Out[6]: False In [7]: 5 == 5 Out[7]: True In [8]: 5 >= 5 Out[8]: True In [9]: 5 10 Out[9]: True In [10]: 8 != 10 Out[10]: True
Обратите внимание, что равенство проверяется двойным == .
Пример использования операторов сравнения:
In [1]: a = 9 In [2]: if a == 10: . : print('a равно 10') . : elif a 10: . : print('a меньше 10') . : else: . : print('a больше 10') . : a меньше 10
Оператор in#
Оператор in позволяет выполнять проверку на наличие элемента в последовательности (например, элемента в списке или подстроки в строке):
In [8]: 'Fast' in 'FastEthernet' Out[8]: True In [9]: 'Gigabit' in 'FastEthernet' Out[9]: False In [10]: vlan = [10, 20, 30, 40] In [11]: 10 in vlan Out[11]: True In [12]: 50 in vlan Out[12]: False
При использовании со словарями условие in выполняет проверку по ключам словаря:
In [15]: r1 = . : 'IOS': '15.4', . : 'IP': '10.255.0.1', . : 'hostname': 'london_r1', . : 'location': '21 New Globe Walk', . : 'model': '4451', . : 'vendor': 'Cisco'> In [16]: 'IOS' in r1 Out[16]: True In [17]: '4451' in r1 Out[17]: False
Операторы and, or, not#
В условиях могут также использоваться логические операторы and , or , not :
In [15]: r1 = . : 'IOS': '15.4', . : 'IP': '10.255.0.1', . : 'hostname': 'london_r1', . : 'location': '21 New Globe Walk', . : 'model': '4451', . : 'vendor': 'Cisco'> In [18]: vlan = [10, 20, 30, 40] In [19]: 'IOS' in r1 and 10 in vlan Out[19]: True In [20]: '4451' in r1 and 10 in vlan Out[20]: False In [21]: '4451' in r1 or 10 in vlan Out[21]: True In [22]: not '4451' in r1 Out[22]: True In [23]: '4451' not in r1 Out[23]: True
Оператор and#
В Python оператор and возвращает не булево значение, а значение одного из операндов.
Если оба операнда являются истиной, результатом выражения будет последнее значение:
In [24]: 'string1' and 'string2' Out[24]: 'string2' In [25]: 'string1' and 'string2' and 'string3' Out[25]: 'string3'
Если один из операторов является ложью, результатом выражения будет первое ложное значение:
In [26]: '' and 'string1' Out[26]: '' In [27]: '' and [] and 'string1' Out[27]: ''
Оператор or#
Оператор or , как и оператор and, возвращает значение одного из операндов.
При оценке операндов возвращается первый истинный операнд:
In [28]: '' or 'string1' Out[28]: 'string1' In [29]: '' or [] or 'string1' Out[29]: 'string1' In [30]: 'string1' or 'string2' Out[30]: 'string1'
Если все значения являются ложными, возвращается последнее значение:
Важная особенность работы оператора or — операнды, которые находятся после истинного, не вычисляются:
In [33]: '' or sorted([44, 1, 67]) Out[33]: [1, 44, 67] In [34]: '' or 'string1' or sorted([44, 1, 67]) Out[34]: 'string1'
Пример использования конструкции if/elif/else#
Пример скрипта check_password.py, который проверяет длину пароля и есть ли в пароле имя пользователя:
# -*- coding: utf-8 -*- username = input('Введите имя пользователя: ') password = input('Введите пароль: ') if len(password) 8: print('Пароль слишком короткий') elif username in password: print('Пароль содержит имя пользователя') else: print('Пароль для пользователя <> установлен'.format(username))
$ python check_password.py Введите имя пользователя: nata Введите пароль: nata1234 Пароль содержит имя пользователя $ python check_password.py Введите имя пользователя: nata Введите пароль: 123nata123 Пароль содержит имя пользователя $ python check_password.py Введите имя пользователя: nata Введите пароль: 1234 Пароль слишком короткий $ python check_password.py Введите имя пользователя: nata Введите пароль: 123456789 Пароль для пользователя nata установлен
Тернарное выражение (Ternary expression)#
Иногда удобнее использовать тернарный оператор, нежели развернутую форму:
s = [1, 2, 3, 4] result = True if len(s) > 5 else False
Этим лучше не злоупотреблять, но в простых выражениях такая запись может быть полезной.
Тернарные операции в Python
Очень часто новички в Python не могут разобраться с тернарными операторами. Помимо путаницы с тем, что же называют тернарным оператором, их часто пытаются применить не к месту. Однако тернарные операции очень удобны, и откладывать их изучение — значит усложнять себе работу.
Тернарная условная операция
В программировании тернарная (от лат. ternarius — «тройной») условная операция состоит из условного выражения и двух аргументов. В зависимости, от результата вычисления условного выражения, тернарная операция вернет один из аргументов.
Тернарные условные операции используются в разных языках программирования. Впервые они появились в Algol-60, где имели такую форму:
В некоторых языках (в основном, испытавших влияние C) подобные операции обозначают символами ?: :
Тернарные операторы в Python
В Python тернарные операции имеют простой и понятный синтаксис:
Значение 1> if условие> else значение 0>
Это делает понимание кода интуитивным. Такие строки читаются, как предложения на английском. Например,
x = 'today' if date == today else date
можно прочитать как «Икс равно ‘today’ если дата сегодняшняя, а иначе — дате». Такая лаконичная запись эстетичнее, чем простые условные блоки, однако имеет свои ограничения. Например, вы не можете использовать в ней break , continue , pass и другие полезные инструкции.
Не стоит путать тенрарные операторы с однострочной записью if :
a, min = 10, 3 if a > min: print(a); print(a - min) # 10, 7
В этом случае, если а больше min , все действия после двоеточия будут выполнены последовательно, а иначе — просто пропущены.
Не забывайте, что операторы сравнения имеют наименьший приоритет. Изменить его можно с помощью скобок:
Тернарные операции могут быть вложенными.
x = ( a if a != 0 else b if b != 0 else c if c != 0 else d )
Очень часто тернарные операции используются в генераторах и списковых включениях. Это единственный способ заменить значения, не подходящие по условию.
lst = [-9, 2, 0] g = (i if i >= 0 else 0 for i in lst) # 0 2 0 lc = [-i if i 0 else 0 for i in lst] # [9, 0, 0]
Обратите внимание, что тернарные операторы используют перед for . После этой инструкции нельзя использовать else .
Пользуясь тем, что True == 1 , а False == 0 , в записи тернарных операций можно обойтись вообще без if и else :
Если выражение возвращает False , из кортежа будет выбран нулевой элемент, а если True — первый.
Заключение
Тернарные операции — удобный способ записать условный блок в одну строку. Это делает код более лаконичным и понятным. Их можно использовать в генераторах и списковых включениях. Вложенные тернарные операторы помогают сокращать блоки if-elif-else , однако их возможности не безграничны, и не всякий условный блок можно заменить.
Практический Python для начинающих
Станьте junior Python программистом за 7 месяцев
Тернарный оператор python elif
Last updated: Feb 21, 2023
Reading time · 3 min# Table of Contents
# If-Elif-Else statement on one line in Python
Use a nested ternary operator to implement an if-elif-else statement on one line.
The first ternary should check for a condition and if the condition is not met, it should return another ternary that does the job of an elif/else statement.
Copied!my_str = 'bobby hadz' result = ("Anonymous" if not my_str else my_str.upper() if len(my_str) > 2 else my_str.capitalize()) print(result) # 👉️ 'BOBBY HADZ'
The ternary operator is very similar to an if/else statement.
Copied!name = 'Bobby Hadz' result = 'James Doe' if not name else name print(result) # 👉️ 'Bob'
The example checks if the name variable is falsy and if it is, the string «James Doe» is returned, otherwise, the name variable is returned.
# Using nested ternaries in Python
To have an inline if-elif-else statement, we have to use a nested ternary.
Copied!my_num = 50 result = 10 if my_num > 100 else 20 if my_num 100 else 0 print(result) # 👉️ 20
You can wrap the statement in parentheses to make it more readable.
Copied!my_num = 50 result = (10 if my_num > 100 else 20 if my_num 100 else 0) print(result) # 👉️ 20
The first ternary in the example checks if the variable stores a value greater than 100 .
If the condition is met, the number 10 gets returned.
The nested ternary operator checks if the variable is less than 100 .
If the condition is met, the number 20 is returned, otherwise, 0 is returned.
Copied!my_num = 50 result = ('a' if my_num > 100 else ('b' if my_num 100 else 'c')) print(result) # 👉️ 'b'
If the condition isn’t met, the else statement runs and the nested ternary checks for another condition.
The nested ternary checks if the variable stores a value of less than 100 and if the condition is met, the string b gets returned. This is the elif statement.
If the condition isn’t met, the else statement runs and the string c gets returned.
# The equivalent of the nested ternary in an if-elif-else statement
Here is how we would implement the ternary operator of the example using if/elif/else statements.
Copied!my_num = 50 if my_num > 100: result = 'a' elif my_num 100: result = 'b' else: result = 'c' print(result) # 👉️ 'b'
Using if-elif-else statements is a bit more readable, but it is also a bit more verbose.
Whether using a nested ternary operator makes your code more readable depends on the complexity of the conditions you are checking for.
Using the shorthand syntax isn’t always recommended.
# Shorthand if-else statement in Python
The ternary operator can also be used if you need a shorthand if-else statement.
The ternary operator will return the value to the left if the condition is met, otherwise, the value in the else statement is returned.
Copied!variable1 = 50 variable2 = 100 result = 5 if variable1 > variable2 else 10 print(result) # 👉️ 10
The ternary operator is very similar to an if/else statement.
The operator in the example checks if variable1 is greater than variable2 .