Книга: PyNEng
Назад: 6. Контроль хода программы
Дальше: for

if/elif/else

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 или 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 

True и False

В Python:

  • True (истина)
    • любое ненулевое число
    • любая непустая строка
    • любой непустой объект
  • False (ложь)
    • 0
    • None
    • пустая строка
    • пустой объект

Остальные значения 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 позволяет выполнять проверку на наличие элемента в последовательности (например, элемента в списке или подстроки в строке):

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 expressions)

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

s = [1, 2, 3, 4] result = True if len(s) > 5 else False 
Назад: 6. Контроль хода программы
Дальше: for