Как работает else
Перейти к содержимому

Как работает else

  • автор:

Как работает функция else в Python?

В условных конструкция и циклах else является необязательным оператором.

В условных конструкция else срабатывает, в случае, если ни одно другое условие не подошло.

Пример 1

answer = 'yes' if answer = 'yes': print('Start game') else: print('Game over') # Output: Game over 

В циклах else сработает после всех итераций.

Пример 2

sum_ = 0 for i in range(100): sum_ += i else: print('Done') 

Пример 3

game_on = True while game_on: print('Do it game') else: print('Game over') 

Оператор if else в Python

При изучении программирования в качестве практики часто приходится создавать «идеальные программы», которые в реальном мире работают совсем не так.

Иногда, например, нужно исполнить ряд инструкций только в том случае, если соблюдаются определенные условия. Для обработки таких ситуаций в языках программирования есть операторы управления. В дополнение к управлению потоком выполнения программы эти операторы используются для создания циклов или пропуска инструкций, когда какое-то условие истинно.

Операторы управления бывают следующих типов:

  1. Оператор-выражение if
  2. Оператор-выражение if-else
  3. Оператор-выражение if-elif-else
  4. Цикл while
  5. Цикл for
  6. Оператор-выражение break
  7. Оператор-выражение 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 
Введите число: 5 

Стоит обратить внимание, что во втором случае, когда условие не истинно, инструкция внутри блока 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. Например:

>>> >>> n = 100 >>> if n > 10: ... 

После нажатия 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.

Как работает оператор else if и в чем отличие от if?

Достаточно рассмотреть простой пример, чтобы понять, в чем заключается разница.

int x = 0; if ( x == 0 ) < System.out.printline( "x = " + x ); ++x; >else if ( x == 1 ) < System.out.printline( "x = " + x ); ++x; >else if ( x == 2 ) < System.out.printline( "x x = " + x ); ++x; >if ( x == 1 ) < System.out.printline( "x = " + x ); ++x; >if ( x == 2 ) < System.out.printline( "x mt24"> 
)" data-controller="se-share-sheet" data-se-share-sheet-title="Поделиться ссылкой на ответ" data-se-share-sheet-subtitle="" data-se-share-sheet-post-type="answer" data-se-share-sheet-social="facebook twitter " data-se-share-sheet-location="2" data-se-share-sheet-license-url="https%3a%2f%2fcreativecommons.org%2flicenses%2fby-sa%2f3.0%2f" data-se-share-sheet-license-name="CC BY-SA 3.0" data-s-popover-placement="bottom-start">Поделиться
)" title="">Улучшить ответ
)">изменён 8 ноя 2016 в 12:25
Nick Volynkin
33.9k 25 золотых знаков 130 серебряных знаков 222 бронзовых знака
ответ дан 8 ноя 2016 в 11:40
Добавить комментарий |
9

Есть. Формат if/else if гарантирует, что при выполнении какого-либо из условий блоки с другими условиями не будут выполнены. При использовании цепочки if это не гарантируется. Например:

int a = 10; if( a > 1 ) System.out.println( "Переменная 'a' больше 1" ); if( a > 5 ) System.out.println( "Переменная 'a' больше 5" ); 

Будут выполнены оба блока, и выведется:

Переменная 'a' больше 1 Переменная 'a' больше 5 

Отслеживать
ответ дан 8 ноя 2016 в 11:39
9,066 13 13 серебряных знаков 26 26 бронзовых знаков

Как такового оператора else if нет, это лишь использование ещё одного if в ветке else другого if . Но разница между ними есть. В первом случае второе условие отработает, если не отработает первое, а третье - если не отработает второе. Во втором случае отработают все условия (если где-то не возникнет, скажем, исключение).

НО. Судя по вашему коду, условия у вас одинаковые. Поэтому в первом случае сработает тоьлко первый if или не сработает ничего. А во втором либо сработают все три if , либо не сработает ничего

Отслеживать
ответ дан 8 ноя 2016 в 11:39
DreamChild DreamChild
36.1k 2 2 золотых знака 44 44 серебряных знака 85 85 бронзовых знаков

В рамках тэга «любой язык» высказывание как такового оператора . нет не совсем верно, ибо есть языки, которые выделяют на сей случай отдельной оператор в духе elseif

10 мая 2019 в 13:56

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

 int x = 1; if(x==3)< System.out.println("Это число 5");//к сожелению не выведет >else if(x==2)< System.out.println("Это число 2");//к сожелению не выведет >else if(x==1)< System.out.println("Это число 1");//выведет вот это >else

Отслеживать
ответ дан 8 ноя 2016 в 12:14
107 1 1 серебряный знак 9 9 бронзовых знаков

Во втором случае у вас проверяются всегда все условия. В первом случае если выполнится первое условие остальные уже не проверяются

Отслеживать
ответ дан 8 ноя 2016 в 11:38
Воробьев Александр Воробьев Александр
1,178 6 6 серебряных знаков 14 14 бронзовых знаков

if (condition) statement; else if (condition) statement; else if (condition) statement; 

чаще всего применяется, когда нужно в зависимости от того, чему равно проверяемое значение, выполнить несколько вариантов действий. И вообще по-идее в таких ситуациях нужно пользоваться оператором ветвления ( switch\case\select и т.д). Но во многих языках он обладает неприятными ограничениями, которые заставляют пользоваться вышеупомянутой конструкцией. Зачем вставлять else , если логика последующих if такова, что проверку пройдёт только один? Чтобы избежать лишних проверок и явно указать читателю исходного кода, что здесь реализован по сути оператор ветвления.

В некоторых языках реализован специальный оператор elseif\elsif\elif позволяющий избегать лишнего вложения блоков.

Условный оператор if. else в Python

Программа, код которой вы видите выше, оценивает значение `выражение`, которое может быть равно True или False . Программа выполнит оператор(ы), только если выражение = True . Если выражение = False , этот кусок кода не будет выполняться.

В Python тело конструкции if обозначается отступами. Тело начинается с первой строки с отступом и заканчивается первой строкой без отступа.

Работая с условной конструкцией, важно знать, что Python интерпретирует ненулевые значения как True . None и 0 интерпретируются как False .

Блок-схема конструкции
Пример использования конструкции
# Если число положительно, мы выведем на экран соответствующее сообщение. num = 3 if num > 0: print(num, "— положительное число.") print("Это сообщение напечатается в любом случае.") num = -1 if num > 0: print(num, "— положительное число.") print("Это сообщение тоже напечатается в любом случае.") 

Вывод:

3 — положительное число. 
Это сообщение выведется в любом случае.
Это сообщение тоже выведется в любом случае.

В примере выше num > 0 — выражение, которое проверяется на истинность. Только если это выражение окажется истинным, т.е. True , выполнится тело оператора if .

При num = 3 выражение num > 0 истинно, поэтому Python выполнит оператор, находящийся в теле if. Вот почему на экран выводится сообщение «3 — положительное число».

При num = -1 выражение num > 0 ложно, поэтому Python проигнорирует оператор, находящийся в теле if.

А вот функции вывода на экран print("Это сообщение выведется в любом случае.") и print("Это сообщение тоже выведется в любом случае.") находятся вне блока if, поэтому выполняются при любых значениях num .

Конструкция if. else

Синтаксис конструкции
if выражение: 
Тело if
else:
Тело else

Оператор if. else оценивает выражение и выполняет тело if только в том случае, если выражение (условие) истинно, то есть равно True .

Если выражение равно False , выполняется тело else . Для разделения этих блоков используются отступы.

Блок-схема конструкции
Пример использования конструкции
# Программа проверяет, является ли число положительным # или отрицательным и выводит соответствующее сообщение. num = 3 # Также попробуйте следующие два варианта. # num = -5 # num = 0 if num >= 0: print("Число больше либо равно 0") else: print("Отрицательное число") 

Вывод:

Число больше либо равно 0

В приведенном выше примере при num = 3 выражение истинно, поэтому выполняется тело if , а тело else игнорируется.

При num = -5 выражение ложно, поэтому выполняется тело else . В этом слуае игнорируется тело if .

При num = 0 выражение истинно, поэтому выполняет тело равно if , а тело else игнорируется.

Конструкция if. elif. else

Синтаксис конструкции
if выражение_1: 
Тело if
elif выражение_2:
Тело elif
else:
Тело else

elif — это сокращение от else if . Этот оператор позволяет нам проверять сразу несколько выражений.

Если условие для if = False , Python оценивает условие блока elif и так далее. Если все условия = False , выполняется тело else .

Для одного if может быть только один else . Но внутри конструкции if. else может быть сколько угодно блоков elif .

Блок-схема конструкции
Пример использования конструкции
# В этой программе мы проверяем, # является ли число положительным, # отрицательным или нулем и # выводим соответствующее выражение. num = 3.4 # Также попробуйте такие варианты: # num = 0 # num = -4.5 if num > 0: print("Положительное число") elif num == 0: print("Ноль") else: print("Отрицательное число") 

Если переменная num содержит положительное значение, Python выведет на экран сообщение «Положительное число».

Если num равно 0, напечатается сообщение «Ноль».

Если num содержит отрицательное значение, Python выведет на экран сообщение «Отрицательное число».

Вложенные конструкции

Любое количество блоков if…elif…else можно разместить внутри другого оператора if…elif…else . Отступы — единственный способ отделять разные уровни вложенности. Это делает код сложнее для понимания, поэтому загроможденной вложенности желательно избегать.

# В этой программе мы вводим число, # проверяем, является ли число положительным, # отрицательным или нулем, и выводим # соответствующее сообщение. # На этот раз мы используем вложенную конструкцию. num = float(input("Введите число: ")) if num >= 0: if num == 0: print("Ноль") else: print("Положительное число") else: print("Отрицательное число") 

Вывод 1:

Введите число: 5
Положительное число

Вывод 2:

Введите число: -1
Отрицательное число

Вывод 3:

Введите число: 0
Ноль

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *