Оператор «если/иначе»

Иногда у нас есть линии, которые мы хотим запускать только при определенных условиях. Например, у нас есть целочисленная переменная A, но мы не знаем, является ли она положительной, отрицательной или нулевой. Итак, мы можем запустить следующие строки для проверки.

# Given that A is an integer
if A > 0:
    print('A is positive!')
elif A < 0:
    print('A is negative!')
else:
    print('A is zero!')

Если значение A равно 5, оператор A > 0 будет True. Следовательно, будет напечатано 'A is positive!'. Программа больше не будет проверять остальные условия.

Если значение A равно –5, выражение A > 0 будет False. Поэтому программа продолжит проверку следующего условия. Оператор A < 0 будет True. Следовательно, будет напечатано 'A is negative!'.

Если значение A равно 0, первые два оператора будут оба False. Следовательно, будет напечатано 'A is zero!'.

В операторе if/else есть три компонента: if, elif и else. Как правило, оператор if/else должен быть написан следующим образом.

if #Statement 1#:
    #Do something#
elif #Statement 2#:
    #Do something#
elif #Statement 3#:
    #Do something#
...
else:
    #Do something#

if является ОБЯЗАТЕЛЬНЫМ и может появляться только ОДИН РАЗ для одного оператора if/else. elif является необязательным и может появляться столько раз, сколько мы хотим. else является необязательным, но может появляться не более одного раза для одного оператора if/else.

Заявления будут рассмотрены последовательно. Как только он найдет оператор True, он запустит соответствующие строки и проигнорирует остальные коды.

Мы можем взглянуть на пример ниже, чтобы увидеть, как это работает.

A = 10

if A > 0:
    print('A is positive!')
elif A > 5:
    print('A is larger than 5!')

Вывод:

>>> A is positive!

В этом случае, хотя оба оператора, A > 0 и A > 5, равны True, будет напечатано только 'A is positive!', потому что 2-й оператор и соответствующие ему строки игнорируются после того, как он обнаружит, что A > 0 равен True.

Мы можем пересмотреть коды, как показано ниже, изменив elif на if.

A = 10

if A > 0:
    print('A is positive!')
if A > 5:
    print('A is larger than 5!')

Вывод:

>>> A is positive!
>>> A is larger than 5!

В этом случае будут выполнены обе функции print. Прямо сейчас это становится двумя операторами if/else, которые независимы друг от друга. Таким образом, 2-й оператор A > 5 будет проверен в любом случае, независимо от того, является ли A > 0 True или False.

Упражнение 01

Учитывая, что score — это целочисленная переменная со значением от 0 до 100. Напишите программу для вывода буквенной оценки. Буквенная оценка определяется, как показано ниже.

A: 90 ≤ оценка

B: 70 ≤ оценка ‹ 90

C: 50 ≤ оценка ≤ 70

Д: оценка ‹ 50

Решение:

if 90 <= score:
    print('A')
elif 70 <= score and score < 90:
    print('B')
elif 50 <= score and score < 70:
    print('C')
else:
    print('D')

Решение можно изменить, как показано ниже, при этом изменения выделены жирным шрифтом.

if 90 <= score:
    print('A')
elif 70 <= score:
    print('B')
elif 50 <= score:
    print('C')
elif 0 <= score:
    print('D')

70 <= score and score < 90 упрощается до 70 <= score. Это потому, что если программа достигает этой строки, это означает, что 90 <= score является False (в противном случае эту строку следует игнорировать). Поэтому, дойдя до этой строки, score < 90 точно будет True. Нам не нужно проверять это снова.

Точно так же мы можем упростить 50 <= score and score < 70 до 50 <= score.

Наконец, я изменил else на elif 0 <= score, что более конкретно. Лично я всегда стараюсь не использовать else для своих проектов, потому что программа будет запускать строки под else в неожиданных условиях. В этом случае, учитывая, что score является целым числом в диапазоне от 0 до 100, достижение else означает, что score может находиться только в диапазоне от 0 до 49, поскольку все предыдущие операторы False. Итак, он печатает D, что правильно. Однако, если предпосылка каким-то образом неверна (например, score отрицательное), исходная программа также напечатает D, и мы потеряем возможность обнаружить ошибку. В модифицированной программе, если ничего не печатается, мы знаем, что с score что-то не так.

Вложенный оператор If/Else

Мы также можем поместить оператор if/else в другой, как в примере ниже.

if 0 < A:
    if 0 < B:
        print('Both A and B are positive!')

Приведенный выше пример имеет тот же эффект, что и приведенный ниже.

if 0 < A and 0 < B:
    print('Both A and B are positive!')

Нам решать, как структурировать коды для лучшей читабельности.

Дальше

Оператор if/else также может помочь нам быстро создать переменную. Пожалуйста, взгляните на случай ниже.

Задание: Учитывая, что A – это число (может быть целым числом или числом с плавающей запятой), напишите программу для создания переменной с именем B, значение которой является абсолютным значением A (не используйте функцию abs()).

Решение:

if 0 <= A:
    B = A
else:
    B = -A

Концепция проста. Если A больше или равно нулю (т. е. A неотрицательно), B будет таким же, как A. В противном случае (т. е. A отрицательное) B будет -A.

Это решение занимает 4 строки, но его можно упростить, как показано ниже.

B = A if 0 <= A else -A

Как правило, формат

#VariableName# = #Value1# if #Condition# else #Value2#