15.1. Команда ветвления
Довольно часто на поставленный вопрос человек получает ответ «Да» или «Нет». В зависимости от ответа человек определяет свои действия и выполняет одну или другую команду или группу команд (пример 15.1).
Роботы и другие технические устройства также могут выполнять различные действия в зависимости от условия. Если условие истинно (на вопрос получен ответ «Да»), то выполняется один набор действий, если ложно, то другой.
Алгоритмическая конструкция «ветвление» обеспечивает выполнение одной или другой последовательности команд в зависимости от истинности или ложности некоторого условия.
|
Команда ветвления может изображаться на блок-схеме следующим образом:
Принцип работы команды ветвления описан в примере 15.2. В языке программирования Python для записи конструкции ветвления используется команда if. Формат записи команды:
if <условие>:
команда(ы) 1
else:
команда(ы) 2
Строка if <условие>: является заголовком ветвления. Эту строку можно прочитать следующим образом: «Если условие верно, то». В следующей строке со сдвигом записывается последовательность команд 1.
После слова else в следующей строке со сдвигом записывается последовательность команд 2. Обратите внимание на то, что символ «:» ставится как в конце заголовка ветвления, так и после слова else.
Команда ветвление может быть записана в полной или сокращенной форме.
Полная форма команды ветвления организует выполнение двух разных наборов команд, из которых выполняется только один. В сокращенной форме один из наборов команд отсутствует. Если отсутствует набор команд, соответствующих ситуации, когда условию ложно, то никакие действия не выполняются (пример 15.3).
Блок-схема сокращенной формы ветвления:

На языке программирования Python команда запишется следующим образом:
if <условие>:
команда(-ы) 1
качестве последовательности команда(-ы) 1 (команда(-ы) 2) может выступать другая команда ветвления. То есть, если истинно (ложно) одно условие, то может потребоваться проверить другое условие. Такие конструкции образуют вложенные ветвления (пример 15.4).
В языке Python для записи вложенных ветвлений (в случае, ложности первого условия) можно применять конструкцию elif. Запись конструкции:
if <условие1>:
команды 1
elif <условие2>:
команды 2
else:
команды 3
Ключевое слово elif в записи команды по существу заменяет два других: else и if. Блоков elif может быть несколько, в том случае, если необходимо проверить не два условия, а больше.
15.2. Составные условия
В качестве условия в алгоритмах с циклами и ветвлениями используется любое понятное исполнителю этого алгоритма высказывание, которое может быть либо истинным, либо ложным.
Все условия, с которыми нам приходилось до сих пор встречаться при составлении алгоритмов для Робота, были простыми высказываниями. Для исполнителя Робот можно строить и составные условия.
Составное условие для Робота, также как и для любого другого исполнителя образуется из нескольких простых условий, соединенных друг с другом логическими операциями.
С логическими операциями над высказываниями вы уже знакомы. В Python используют следующие логические операции:
| Логическая операция |
Запись в Python |
| НЕ |
not |
| И |
and |
| ИЛИ |
or |
Истинность или ложность составного условия для исполнителя Робот определяется для конкретной обстановки.
Пример 15.5. Проверить для Робота следующие составные условия:
1.wall_left() and cell_is_filled()
2.wall_up() or wall_down()
3.not (wall_right() or not wall_up())
15.3. Использование команды ветвления для исполнителя Робот
Пример 15.6. Робот должен закрасить клетку, которая находится за стеной. В зависимости от обстановки обход стены может осуществляться по-разному.
В начале Робот должен сдвинуться вправо. Если стена снизу, то сверху свободно и можно обойти стену сверху, в противном случае Робот обходит стену снизу. После обхода стены Робот закрашивает клетку. Алгоритм можно записать следующим образом:
Вправо
Если стена снизу, то
Вверх
Вправо
Вниз
Иначе
Вниз
Вправо
Вверх
Закрась
Для решения этой задачи использована полная форма команды ветвления.
Пример 15.7. Робот находится на неизвестной клетке поля без линий. Он должен закрасить клетку слева от себя.
Робот может переместиться влево для закрашивания клетки только в том случае, если слева нет стены. Иначе, он не выполняет никаких действий и остаётся на месте.
Поэтому, прежде чем сдвинуться влево, Робот должен проверить, свободно ли слева. В том случае, когда Робот находится возле левой границы поля, он ничего не делает, остается на своем месте.
Результат работы данной программы зависит от начального положения Робота.
Для решения этой задачи использована сокращенная форма команды ветвления.
Пример 15.8. Робот находится на произвольной, не прилежащей к границе, клетке поля. Вокруг клетки сверху или снизу могут быть стены. Он должен закрасить клетку, на которой находится, если у нее есть хоть одна стена. Иначе Робот должен сдвинуться влево.
Программа для решения этой задачи может быть записана двумя способами:
- с использованием конструкции elif;
- с использованием составного условия.
В первом случае Робот проверяет условие «стена сверху» и в случае его ложности переходит на проверку условия «стена снизу». Во втором случае используется составное условие: «стена сверху или стена снизу».