Объясните условное ветвление с помощью операторов if в Python.
- Основы операторов if (if, elif, else)
- Укажите условия с помощью операторов сравнения и т.д.
- Укажите условия по номеру, списку и т.д.
- Укажите несколько условий или отрицаний с помощью логических операторов (and, or, not)
- Условные выражения для новых строк и нескольких строк
Существует также тернарный оператор, который описывает условную ветвь в одной строке. См. следующую статью.
- СООТВЕТСТВУЮЩИЕ:Написание операторов 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 и других языках, и может быть любое количество «elif».
Если имеется только одно условное выражение или обработка при false не требуется, блоки «elif» и «else» можно опустить.
Укажите условия с помощью операторов сравнения и т.д.
Укажите условие с помощью операции, которая возвращает тип bool (true, false), например, оператор сравнения.
Операторы сравнения в Python следующие
оператор | результат |
---|---|
x < y | истина, если x меньше y |
x <= y | true, если x меньше или равно y |
x > y | истина, если x больше y |
x >= y | true, если 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
==
!=
Выше приведено сравнение значений; чтобы сравнить идентичность объектов, используйте следующее
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 следующие объекты считаются ложными.
- Константы, определенные как false:
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)
Логические операторы (and, or, not) могут использоваться для работы с логической связью, логической дизъюнкцией и отрицанием нескольких условий.
оператор | (Результат (в условном выражении оператора if) |
---|---|
x and y | истинно, если и x, и y истинны |
x or y | истинно, если истинно либо x, либо y |
not x | ложно, если 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» (логическая связь, логическая дизъюнкция, отрицание)
Можно использовать and и or более одного раза.
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.
- СООТВЕТСТВУЮЩИЕ:Запись длинных строк на нескольких строках в Python