Как писать условные ветви с помощью операторов if в Python

Бизнес

Объясните условное ветвление с помощью операторов if в Python.

  • Основы операторов if (if, elif, else)
  • Укажите условия с помощью операторов сравнения и т.д.
  • Укажите условия по номеру, списку и т.д.
  • Укажите несколько условий или отрицаний с помощью логических операторов (and, or, not)
  • Условные выражения для новых строк и нескольких строк

Существует также тернарный оператор, который описывает условную ветвь в одной строке. См. следующую статью.

Основы операторов 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 <= ytrue, если x меньше или равно y
x > yистина, если x больше y
x >= ytrue, если x больше или равно y
x == ytrue, если значения x и y равны
x != ytrue, если значения x и y не равныx is yистина, если x и y — один и тот же объектx is not ytrue, если 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
  • ==
  • !=

Выше приведено сравнение значений; чтобы сравнить идентичность объектов, используйте следующее

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

Логические операторы (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. Подробнее см. в следующей статье.

Можно использовать 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.

Copied title and URL