- ru
- Language: en
- Documentation version: latest
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
Note
Обратите внимание, что равенство проверяется двойным ==
.
Пример использования операторов сравнения:
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'
Если все значения являются ложными, возвращается последнее значение:
In [31]: '' or [] or {}
Out[31]: {}
Важная особенность работы оператора 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
Этим лучше не злоупотреблять, но в простых выражениях такая запись может быть полезной.