Перейти до змісту

if/elif/else

Конструкція if/elif/else дозволяє робити розгалуження під час програми. Програма йде у гілку під час виконання певної умови.

У цій конструкції тільки if є обов'язковим, elif та else опціональні:

  • Перевірка if завжди йде першою.
  • Після оператора if має бути якась умова: якщо ця умова виконується, дії в блоці if виконуються.
  • За допомогою elif можна зробити кілька розгалужень, тобто перевіряти вхідні дані на різні умови.
  • Блоків elif може бути багато.
  • Блок else виконується у тому випадку, якщо жодна з умов if або elif не була істинною.

Приклад конструкції:

a = 9

if a > 10:
    print("a більше 10")
else:
    print("a менше чи дорівнює 10")

print("Кінець")
flowchart TD
   a["a = ..."] -->c{if a > 10};
   c -->|True|b["a більше 10"];
   c -->|False|e["a менше чи дорівнює 10"];
   b --> q[Кінець];
   e --> q;

Приклад конструкції:

a = 9

if a == 10:
    print("a дорівнює 10")
elif a < 10:
    print("a менше 10")
else:
    print("a більше 10")

Вивід:

a менше 10

Умови

Конструкція if використовує умови: після if і elif завжди пишеться логічний вираз. Блоки if/elif виконуються тільки коли логічний вираз істинний, тому перше з чим треба розібратися - це те, що є істинним, а що хибним в 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 перевіряє ключі словника:

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:

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 є те, що операнди, які стоять після істинного, не оцінюються.

Приклад використання конструкції if/elif/else

Приклад коду, який перевіряє довжину пароля та чи містить пароль ім'я користувача:

username = input("Введіть ім'я користувача: ")
password = input("Введіть пароль: ")

if len(password) < 8:
    print("Пароль надто короткий")
elif username in password:
    print("Пароль містить ім'я користувача")
else:
    print(f"Пароль для користувача {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 встановлено