Як написати умовні гілки з операторами if в Python

Бізнес

Поясніть умовне розгалуження за допомогою операторів if в Python.

  • Основи операторів if (if, elif, else)
  • Укажіть умови операторами порівняння тощо.
  • Вкажіть умови за номером, списком тощо.
  • Вкажіть кілька умов або заперечень за допомогою логічних операторів (і, або, ні)
  • Умовні вирази в нових і кількох рядках

Існує також тернарний оператор, який описує умовну гілку в одному рядку. Дивіться наступну статтю.

Основи операторів if (if, elif, else)

Основна форма оператора if виглядає наступним чином

if Conditional expression 1:
    `Processing to be performed if Expression 1 is True.`
elif Conditional expression 2:
    `Processing to be performed when expression 1 is false and expression 2 is true.`
elif Expression 3:
    `Process when expression 1 and 2 are false and expression 3 is true.`
...
else:
    `Processing when all conditionals are false.`

“elif” відповідає “else if” в C та інших мовах, і може бути будь-яка кількість “elifs”.

Якщо є лише один умовний вираз або обробка, коли false не є необхідними, блоки “elif” і “else” можна опустити.

Укажіть умови операторами порівняння тощо.

Укажіть умову за допомогою операції, яка повертає булівський тип (true, false), наприклад оператор порівняння.

Оператори порівняння Python такі

операторрезультат
x < yістинно, якщо x менше за y
x <= yістинно, якщо x менше або дорівнює y
x > yістинно, якщо x більше за y
x >= yістинно, якщо x більше або дорівнює y
x == ytrue, якщо значення x і y рівні
x != ytrue, якщо значення x і y не рівніx is yістинно, якщо x і y є одним і тим же об’єктомx is not yістинно, якщо x і y не є одним і тим же об’єктомx in yістина, якщо x міститься в yx not in yістина, якщо x не міститься в y

Приклад. Для зручності він визначається як функція з оператором def.

def if_test(num):
    if num > 100:
        print('100 < num')
    elif num > 50:
        print('50 < num <= 100')
    elif num > 0:
        print('0 < num <= 50')
    elif num == 0:
        print('num == 0')
    else:
        print('num < 0')

if_test(1000)
# 100 < num

if_test(70)
# 50 < num <= 100

if_test(0)
# num == 0

if_test(-100)
# num < 0

Наступне можна написати унікальним для Python способом. Подробиці дивіться в наступній статті.
a < x < b

def if_test2(num):
    if 50 < num < 100:
        print('50 < num < 100')
    else:
        print('num <= 50 or num >= 100')

if_test2(70)
# 50 < num < 100

if_test2(0)
# num <= 50 or num >= 100
  • #ERROR!
  • !=

Вище наведене порівняння значень; щоб порівняти ідентичність об’єктів, скористайтеся наступним

  • is
  • is not

Наприклад, якщо порівнювати ціле число і число з плаваючою комою, “==” повертає true, якщо значення еквівалентні, але “is” повертає false, оскільки це різні об’єкти.

i = 10
print(type(i))
# <class 'int'>

f = 10.0
print(type(f))
# <class 'float'>

print(i == f)
# True

print(i is f)
# False

Також можна зробити умову, чи містить список чи рядок певний елемент (символ).

  • in:включати
  • not in:не включаючи
def if_test_in(s):
    if 'a' in s:
        print('a is in string')
    else:
        print('a is NOT in string')

if_test_in('apple')
# a is in string

if_test_in('melon')
# a is NOT in string

Вкажіть умови за номером, списком тощо.

Умовним виразом оператора if може бути число, список або інший об’єкт, який не має типу bool (true, false).

if 10:
    print('True')
# True

if [0, 1, 2]:
    print('True')
# True

У умовному виразі оператора if на Python наступні об’єкти вважаються хибними.

Числа, що представляють нуль, порожні рядки, списки тощо, вважаються хибними; всі інші вважаються істинними.

Як оцінюється об’єкт, можна перевірити за допомогою bool().

print(bool(10))
# True

print(bool(0.0))
# False

print(bool([]))
# False

print(bool('False'))
# True

Це можна використовувати, наприклад, для простого запису процесу, коли список порожній.

def if_test_list(l):
    if l:
        print('list is NOT empty')
    else:
        print('list is empty')

if_test_list([0, 1, 2])
# list is NOT empty

if_test_list([])
# list is empty

Зауважте, що рядок «False» також буде істинним, оскільки, як показано у прикладі вище, будь-який рядок, який не є порожнім у рядку, буде істинним.’ Щоб перетворити певний рядок, наприклад ‘True’ або ‘False’ в 1,0, використовуйте strtobool() у модулі distutils.util.

Вкажіть кілька умов або заперечень за допомогою логічних операторів (і, або, ні)

Логічні оператори (and, or, not) можна використовувати для обробки логічної кон’юнкції, логічної диз’юнкції та заперечення кількох умов.

оператор(Результат (в умовному виразі оператора if)
x and yістинно, якщо і x, і y істинні
x or yістинно, якщо істинно x або y
not xfalse, якщо x є істинним, істинним, якщо x є хибним
def if_test_and_not(num):
    if num >= 0 and not num % 2 == 0:
        print('num is positive odd')
    else:
        print('num is NOT positive odd')

if_test_and_not(5)
# num is positive odd

if_test_and_not(10)
# num is NOT positive odd

if_test_and_not(-10)
# num is NOT positive odd

Насправді, “x і y” і “x або y” повертають не True або False, а x або y. Поки вони використовуються в умовних виразах у операторах if, не варто турбуватися про них, оскільки вони оцінюються як True або False. Подробиці дивіться в наступній статті.

Можна використовувати і і або більше одного разу.

def if_test_and_not_or(num):
    if num >= 0 and not num % 2 == 0 or num == -10:
        print('num is positive odd or -10')
    else:
        print('num is NOT positive odd or -10')

if_test_and_not_or(5)
# num is positive odd or -10

if_test_and_not_or(10)
# num is NOT positive odd or -10

if_test_and_not_or(-10)
# num is positive odd or -10

Умовні вирази в нових і кількох рядках

Коли використовується кілька умовних виразів, з’єднуючи їх за допомогою «і» або «або», і кожен рядок стає довгим, іноді необхідно розбити умовний вираз і записати його в кількох рядках.

Розрив рядка можна зробити за допомогою зворотної косої риски або узявши весь рядок у дужки.

def if_test_and_backslash(num):
    if num >= 0 \
       and not num % 2 == 0:
        print('num is positive odd')
    else:
        print('num is NOT positive odd')

if_test_and_backslash(5)
# num is positive odd

def if_test_and_brackets(num):
    if (num >= 0
        and not num % 2 == 0):
        print('num is positive odd')
    else:
        print('num is NOT positive odd')

if_test_and_brackets(5)
# num is positive odd

Ви можете використовувати зворотну косу риску, щоб розривати рядок скільки завгодно разів. Аналогічно, ви можете розбити рядок будь-яку кількість разів у дужках. Немає обмеження на відступ.

Зауважте, що це техніка, яку можна використовувати будь-де в коді Python, а не лише в операторах if.