Ветвление. Условный оператор
Last updated
Last updated
Ход выполнения программы может быть линейным, то есть таким, когда выражения выполняются друг за другом, начиная с первого и заканчивая последним. Ни одна строка кода программы не пропускается.
Однако чаще в программах бывает не так. При выполнении кода, в зависимости от тех или иных условий, некоторые его участки могут быть опущены, в то время как другие – выполнены. Иными словами, в программе может присутствовать ветвление, которое реализуется условным оператором – особой конструкцией языка программирования.
Проведем аналогию с реальностью. Человек живет по расписанию. Можно сказать, расписание – это алгоритм для человека, его программный код, подлежащий выполнению. В расписании на 18.00 стоит поход в бассейн. Однако экземпляр биоробота класса Homo sapiens через свои рецепторы-сенсоры получает информацию, что воду из бассейна слили. Разумно было бы отменить занятие по плаванию, то есть изменить ход выполнения программы-расписания. Одним из условий посещения бассейна должно быть его функционирование, иначе должны выполняться другие действия.
Подобная нелинейность действий может быть реализована в компьютерной программе. Например, часть кода будет выполняться лишь при определенном значении конкретной переменной. В языках программирования используется приблизительно такая конструкция условного оператора:
Перевести на человеческий язык можно так: если логическое выражение возвращает истину, то выполняются выражения внутри фигурных скобок; если логическое выражение возвращает ложь, то код внутри фигурных скобок не выполняется. С английского "if" переводится как "если".
Конструкция if логическое_выражение
называется заголовком условного оператора. Выражения внутри фигурных скобок – телом условного оператора. Тело может содержать как множество выражений, так и всего одно или даже быть пустым.
Пример использования условного оператора в языке программирования Python:
В Питоне вместо фигурных скобок используется двоеточие. Обособление вложенного кода, то есть тела оператора, достигается за счет отступов. В программировании принято делать отступ равным четырем пробелам. Однако также можно использовать клавишу табуляции (Tab) на клавиатуре. Большинство сред программирования автоматически делают отступ, как только вы поставите двоеточие и перейдете на новую строку. Однако при работе в интерактивном режиме надо делать отступы вручную.
Нахождение в теле условного оператора здесь обозначается тремя точками. При создании файла со скриптом таких точек быть не должно, как и приглашения >>>
.
Python считается языком с ясным синтаксисом и легко читаемым кодом. Это достигается сведением к минимуму таких вспомогательных элементов как скобок и точек с запятой. Для разделения выражений используется переход на новую строку, а для обозначения вложенных выражений – отступы от начала строки. В других языках данный стиль программирования также используется, но лишь для удобочитаемости кода человеком. В Питоне же он возведен в ранг синтаксического правила.
В примере выше логическим выражением является n < 100
. Если оно возвращает истину, то выполнится строчка кода b = n + a
. Если логическое выражение ложно, то выражение b = n + a
не выполнится.
Данный пример вырван из контекста и сам по-себе не является рабочим. Полная версия программы могла бы выглядеть так:
Последняя строчка кода print(b)
уже не относится к условному оператору, что обозначено отсутствием перед ней отступа. Она не является вложенной в условный оператор, значит, не принадлежит ему.
Поскольку переменная n равна 98, а это меньше 100, то b станет равной 148-ми. Это значение будет выведено на экран. Если переменная n изначально была бы связана, например, со значением 101, то на экран был бы выведен 0. При n, равной 101, логическое выражение в заголовке условного оператора вернуло бы ложь. Значит, тело не было бы выполнено, и переменная b не изменилась бы.
Структуру программы можно изобразить следующим образом:
Основная ветка программы выполняется всегда, а вложенный код лишь тогда, когда в темно-зеленой строчке, обозначающей заголовок условного оператора, случается истина.
Для небольших программ иногда чертят так называемые блок-схемы, отражающие алгоритм выполнения. В языке блок-схем определенные конструкции обозначаются своими фигурами. Так блок действий обозначается прямоугольником, а логическое выражение – ромбом. Для кода выше блок-схема может выглядеть так:
Условный оператор может включать не одну ветку, а две, реализуя тем самым полноценное ветвление.
В случае возврата логическим выражением False
поток выполнения программы не возвращается сразу в основную ветку. На случай False
существует другой вложенный код, отличный от случая True
. Другими словами, встретившись с расширенной версией условного оператора, поток выполнения программы не вернется в основную ветку, не выполнив хоть какой-нибудь вложенный код.
В языках программирования разделение на две ветви достигается с помощью добавления блока else, получается так называемое if–else (если-иначе). Синтаксис выглядит примерно так:
Если условие при инструкции if
оказывается ложным, то выполняется блок кода при инструкции else
. Ситуация, при которой бы выполнились обе ветви, невозможна. Либо код, принадлежащий if
, либо код, принадлежащий еlse
. Никак иначе. В заголовке else
никогда не бывает логического выражения.
Пример кода с веткой else
на языке программирования Python:
Следует иметь в виду, что логическое выражение при if
может выглядеть "нестандартно", то есть не так просто, как a > b
и тому подобное. Там может стоять просто одна переменная, число, слово True
или False
, а также сложное логическое выражение, когда два простых соединяются через логически И или ИЛИ.
Если вместо знака вопроса будет стоять 0, то с логической точки зрения это False
, значит выражение в if
не будет выполнено. Если a будет связано с любым другим числом, то оно будет расцениваться как True
, и тело условного оператора выполнится. Другой пример:
Здесь a уже связана с булевым значением. В данном случае это True
. Отметим, что в выражении a = 5 > 0
присваивание выполняется после оператора сравнения, так что подвыражение 5 > 0
выполнится первым, после чего его результат будет присвоен переменной a. На будущее, если вы сомневаетесь в последовательности выполнения операторов, используйте скобки, например так: a = (5 > 0)
.
Третий пример:
Тут, чтобы вложенный код выполнился, a должно быть больше нуля и одновременно меньше b. Также в Питоне, в отличие от других языков программирования, позволительна такая сокращенная запись сложного логического выражения:
Напишите программу (файл TakeInput.py), которая просит пользователя что-нибудь ввести с клавиатуры. Если он вводит какие-нибудь данные, то на экране должно выводиться сообщение "ОК". Если он не вводит данные, а просто нажимает Enter, то программа ничего не выводит на экран.
Напишите программу (файл PosNeg.py), которая запрашивает у пользователя число. Если оно больше нуля, то в ответ на экран выводится число 1. Если введенное число не является положительным, то на экран должно выводиться -1.