Поясніть умовне розгалуження за допомогою операторів if в Python.
- Основи операторів if (if, elif, else)
- Укажіть умови операторами порівняння тощо.
- Вкажіть умови за номером, списком тощо.
- Вкажіть кілька умов або заперечень за допомогою логічних операторів (і, або, ні)
- Умовні вирази в нових і кількох рядках
Існує також тернарний оператор, який описує умовну гілку в одному рядку. Дивіться наступну статтю.
- ПОВ’ЯЗАНІ:Написання операторів if в один рядок за допомогою потрійного оператора Python (умовного оператора)
Основи операторів 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 == y | true, якщо значення x і y рівні |
x != y
x is y
x is not y
x in y
x not in 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 наступні об’єкти вважаються хибними.
- Константи визначені як хибні:
None
,false
- Нуль у числовому типі:
0
,0
,0j
,Decimal(0)
,Fraction(0, 1)
- Порожня послідовність або колекція:
'
,()
,[]
,{}
,set()
,range(0)
Truth Value Testing — Built-in Types — Python 3.10.4 Documentation
Числа, що представляють нуль, порожні рядки, списки тощо, вважаються хибними; всі інші вважаються істинними.
Як оцінюється об’єкт, можна перевірити за допомогою 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 x | false, якщо 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. Подробиці дивіться в наступній статті.
- ПОВ’ЯЗАНІ:Логічні оператори Python “and, or, not” (логічна кон’юнкція, логічна диз’юнкція, заперечення)
Можна використовувати і і або більше одного разу.
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.