Оператор if else в Python
При изучении программирования в качестве практики часто приходится создавать «идеальные программы», которые в реальном мире работают совсем не так.
Иногда, например, нужно исполнить ряд инструкций только в том случае, если соблюдаются определенные условия. Для обработки таких ситуаций в языках программирования есть операторы управления. В дополнение к управлению потоком выполнения программы эти операторы используются для создания циклов или пропуска инструкций, когда какое-то условие истинно.
Операторы управления бывают следующих типов:
- Оператор-выражение if
- Оператор-выражение if-else
- Оператор-выражение if-elif-else
- Цикл while
- Цикл for
- Оператор-выражение break
- Оператор-выражение continue
В этом уроке речь пойдет о первых трех операторах управления.
Оператор if
Синтаксис оператора if следующий:
if condition: indented statement 1> indented statement 2> non-indented statement>
Первая строчка оператора, то есть if condition : — это условие if, а condition — это логическое выражение, которое возвращает True или False . В следующей строке блок инструкций. Блок представляет собой одну или больше инструкций. Если он идет следом за условием if, такой блок называют блоком if.
Стоит обратить внимание, что у каждой инструкции в блоке if одинаковый отступ от слова if. Многие языки, такие как C, C++, Java и PHP, используют фигурные скобки ( <> ), чтобы определять начало и конец блока, но в Python используются отступы.
Каждая инструкция должна содержать одинаковое количество пробелов. В противном случае программа вернет синтаксическую ошибку. В документации Python рекомендуется делать отступ на 4 пробела. Такая рекомендация актуальная для и для этого .
Когда выполняется инструкция if, проверяется условие. Если условие истинно, тогда все инструкции в блоке if выполняются. Но если условие оказывается неверным, тогда все инструкции внутри этого блока пропускаются.
Инструкции следом за условием if, у которых нет отступов, не относятся к блоку if. Например, — это не часть блока if, поэтому она будет выполнена в любом случае.
number = int(input("Введите число: ")) if number > 10: print("Число больше 10")
Введите число: 100 Число больше 10
Стоит обратить внимание, что во втором случае, когда условие не истинно, инструкция внутри блока if пропускается. В этом примере блок if состоит из одной инструкции, но их может быть сколько угодно, главное — делать отступы.
number = int(input("Введите число: ")) if number > 10: print("первая строка") print("вторая строка") print("третья строка") print("Выполняется каждый раз, когда вы запускаете программу") print("Конец")
Введите число: 45 первая строка вторая строка третья строка Выполняется каждый раз, когда вы запускаете программу Конец
Введите число: 4 Выполняется каждый раз, когда вы запускаете программу Конец
Здесь важно обратить внимание, что только выражения на строках 3, 4 и 5 относятся к блоку if. Следовательно, они будут исполнены только в том случае, когда условие if будет истинно. Но инструкции на строках 7 и 8 выполнятся в любом случае.
Консоль Python реагирует иначе при использовании операторов управления прямо в ней. Стоит напомнить, что для разбития выражения на несколько строк используется оператор продолжение ( \ ). Но в этом нет необходимости с операторами управления. Интерпретатор Python автоматически активирует мультистрочный режим, если нажать Enter после условия if. Например:
После нажатия Enter на строке с условием if командная строка преобразуется с >>> на … . Консоль Python показывает … для многострочных инструкций. Это значит, что начатая инструкция все еще не закончена.
Чтобы закончить инструкцию if, нужно добавить еще одну инструкцию в блок if:
>>> >>> n = 100 >>> if n > 10: ... print("n v 10") ...
Python не будет автоматически добавлять отступ. Это нужно сделать самостоятельно. Закончив ввод инструкции, нужно дважды нажать Enter, чтобы исполнить инструкцию. После этого консоль вернется к изначальному состоянию.
>>> >>> n = 100 >>> if n > 10: ... print("n больше чем 10") ... n больше чем 10 >>>
Все эти программы заканчиваются внезапно, не показывая ничего, если условие не истинно. Но в большинстве случаев пользователю нужно показать хотя бы что-нибудь. Для этого используется оператор-выражение if-else.
Оператор if-else
Оператор if-else исполняет одну порцию инструкций, если условие истинно и другое — если нет. Таким образом этот оператор предлагает два направления действий. Синтаксис оператора if-else следующий:
if condition: # блок if statement 1 statement 2 and so on else: # блок else statement 3 statement 4 and so on:
Когда оператор if-else исполняется, условие проверяется, и если оно возвращает True , когда инструкции в блоке if исполняются. Но если возвращается False , тогда исполняются инструкции из блока else.
Пример 1: программа для расчета площади и длины окружности круга.
radius = int(input("Введите радиус: ")) if radius >= 0: print("Длина окружности token punctuation">, 2 * 3.14 * radius) print("Площадь token punctuation">, 3.14 * radius ** 2) else: print("Пожалуйста, введите положительное число")
Введите радиус: 4 Длина окружности = 25.12 Площадь = 50.24
Введите радиус: -12 Пожалуйста, введите положительное число
Теперь программа показывает корректный ответ пользователю, даже если условие if не является истинным. Это и требуется.
В инструкциях if-else нужно следить за тем, чтобы условия if и else находились на одном уровне. В противном случае программа вернет синтаксическую ошибку. Например:
radius = int(input("Введите радиус: ")) if radius >= 0: print("Длина окружности token punctuation">, 2 * 3.14 * radius) print("Площадь token punctuation">, 3.14 * radius ** 2) else: print("Пожалуйста, введите положительное число")
Если попробовать запустить эту программу, то появится следующая ошибка:
$ python3 if_and_else_not_aligned.py File "if_and_else_not_aligned.py", line 6 else: ^ SyntaxError: invalid syntax $
Для исправления проблемы нужно вертикально выровнять if и else
Пример 2: программа для проверки пароля, введенного пользователем.
password = input("Введите пароль: ") if password == "sshh": print("Добро пожаловать") else: print("Доступ запрещен")
Введите пароль: sshh Добро пожаловать
Введите пароль: abc Доступ запрещен
Вложенные операторы if и if-else
Использовать операторы if-else можно внутри других инструкций if или if-else. Это лучше объяснить на примерах:
Оператор if внутри другого if-оператора
Пример 1: программа, проверяющая, имеет ли студент право на кредит.
gre_score = int(input("Введите текущий лимит: ")) per_grad = int(input("Введите кредитный рейтинг: ")) if per_grad > 70: # внешний блок if if gre_score > 150: # внутренний блок if print("Поздравляем, вам выдан кредит") else: print("Извините, вы не имеете права на кредит")
Здесь оператор if используется внутри другого if-оператора. Внутренним называют вложенный оператором if. В этом случае внутренний оператор if относится к внешнему блоку if, а у внутреннего блока if есть только одна инструкция, которая выводит “Поздравляем, вам выдан кредит”.
Сначала оценивается внешнее условие if, то есть per_grad > 70 . Если оно возвращает True , тогда управление программой происходит внутри внешнего блока if. Там же проверяется условие gre_score > 150 . Если оно возвращает True , тогда в консоль выводится «Congratulations you are eligible for loan» . Если False , тогда программа выходит из инструкции if-else, чтобы исполнить следующие операции. Ничего при этом не выводится в консоль.
При этом если внешнее условие возвращает False , тогда выполнение инструкций внутри блока if пропускается, и контроль переходит к блоку else (9 строчка).
Введите текущий лимит: 160 Введите кредитный рейтинг: 75 Поздравляем, вам выдан кредит
Введите текущий лимит: 160 Введите кредитный рейтинг: 60 Извините, вы не имеете права на кредит
У этой программы есть одна маленькая проблема. Запустите ее заново и введите gre_score меньше чем 150 , а per_grade — больше 70 :
Введите текущий лимит: 140 Введите кредитный рейтинг: 80
Программа не выводит ничего. Причина в том, что у вложенного оператора if нет условия else. Добавим его в следующем примере.
Пример 2: инструкция if-else внутри другого оператора if.
gre_score = int(input("Введите текущий лимит: ")) per_grad = int(input("Введите кредитный рейтинг: ")) if per_grad > 70: if gre_score > 150: print("Поздравляем, вам выдан кредит") else: print("У вас низкий кредитный лимит") else: print("Извините, вы не имеете права на кредит")
Введите текущий лимит: 140 Введите кредитный рейтинг: 80 У вас низкий кредитный лимит
Эта программа работает та же, как и предыдущая. Единственное отличие — у вложенного оператора if теперь есть инструкция else. Теперь если ввести балл GRE меньше, чем 150, программа выведет: “У вас низкий кредитный лимит”
При создании вложенных операторов if или if-else, всегда важно помнить об отступах. В противном случае выйдет синтаксическая ошибка.
Оператор if-else внутри условия else
Пример 3: программа для определения оценки студента на основе введенных баллов.
score = int(input("Введите вашу оценку: ")) if score >= 90: print("Отлично! Ваша оценка А") else: if score >= 80: print("Здорово! Ваша оценка - B") else: if score >= 70: print("Хорошо! Ваша оценка - C") else: if score >= 60: print("Ваша оценка - D. Стоит повторить материал.") else: print("Вы не сдали экзамен")
Введите вашу оценку: 92 Отлично! Ваша оценка А
Введите вашу оценку: 72 Хорошо! Ваша оценка - C
Введите вашу оценку: 56 Вы не сдали экзамен
Когда управление программой переходит к оператору if-else, проверяется условие на строке 3 ( score >= 90 ). Если оно возвращает True , в консоль выводится “Отлично! Ваша оценка А”. Если значение неверное, управление переходит к условию else на 5 строке. Теперь проверяется условие score >= 80 (6 строка). Если оно верное, тогда в консоли выводится “Здорово! Ваша оценка — B”.
В противном случае управление программой переходит к условию else на 8 строке. И здесь снова имеется вложенный оператор if-else. Проверяется условие ( score >= 70 ). Если оно истинно, тогда в консоль выводится “Хорошо! Ваша оценка — C”. В противном случае управление переходит к блоку else на 11 строке. В конце концов, проверяется условие ( score >= 60 ). Если оно возвращает True , тогда в консоль выводится “Ваша оценка — D. Стоит повторить материал.” Если же False , тогда в консоли будет “Вы не сдали экзамен”. На этом этапе управление переходит к следующим инструкциям, написанным после внешнего if-else.
Хотя вложенные операторы if-else позволяют проверять несколько условий, их довольно сложно читать и писать. Эти же программы можно сделать более читабельными и простыми с помощью if-elif-else.
Оператор if-elif-else
Оператор if-elif-else — это альтернативное представление оператора if-else, которое позволяет проверять несколько условий, вместо того чтобы писать вложенные if-else. Синтаксис этого оператора следующий:
if condition_1: # блок if statement statement more statement elif condition_2: # первый блок elif statement statement more statement elif condition_3: # второй блок elif statement statement more statement ... else statement statement more statement
Примечание: … означает, что можно писать сколько угодно условий eilf .
Когда исполняется инструкция if-elif-else, в первую очередь проверяется condition_1 . Если условие истинно, тогда исполняется блок инструкций if. Следующие условия и инструкции пропускаются, и управление переходит к операторам вне if-elif-else.
Если condition_1 оказывается ложным, тогда управление переходит к следующему условию elif , и проверяется condition_2 . Если оно истинно, тогда исполняются инструкции внутри первого блока elif . Последующие инструкции внутри этого блока пропускаются.
Этот процесс повторяется, пока не находится условие elif , которое оказывается истинным. Если такого нет, тогда исполняется блок else в самом конце.
Перепишем программу с помощью if-elif-else.
score = int(input("Введите вашу оценку: ")) if score >= 90: print("Отлично! Ваша оценка А") elif score >= 80: print("Здорово! Ваша оценка - B") elif score >= 70: print("Хорошо! Ваша оценка - C") elif score >= 60: print("Ваша оценка - D. Стоит повторить материал.") else: print("Вы не сдали экзамен")
Введите вашу оценку: 78 Хорошо! Ваша оценка - C
Введите вашу оценку: 91 Отлично! Ваша оценка А
Введите вашу оценку: 55 Вы не сдали экзамен
Такую программу намного легче читать, чем в случае с вложенными if-else.