Конструкция if/elif/else дает возможность выполнять различные действия в зависимости от условий.
В этой конструкции только if является обязательным, elif и else опциональны:
Пример конструкции:
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 или elif могут быть, например, такие конструкции:
In [7]: 5 > 3 Out[7]: True In [8]: 5 == 5 Out[8]: True In [9]: 'vlan' in 'switchport trunk allowed vlan 10,20' Out[9]: True In [10]: 1 in [ 1, 2, 3 ] Out[10]: True In [11]: 0 in [ 1, 2, 3 ] Out[11]: False
В Python:
Остальные значения True или False, как правило, логически следуют из условия.
Например, так как пустой список это ложь, проверить, пустой ли список, можно таким образом:
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
позволяет выполнять проверку на наличие элемента в последовательности (например, элемента в списке или подстроки в строке):
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
:
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
В 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
, как и оператор 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'
Пример скрипта 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 установлен
Иногда удобнее использовать тернарный оператор, нежели развернутую форму:
s = [1, 2, 3, 4] result = True if len(s) > 5 else False