Оператор «если/иначе»
Иногда у нас есть линии, которые мы хотим запускать только при определенных условиях. Например, у нас есть целочисленная переменная 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#