Условный оператор в Scratch. Блоки "если" и "если-иначе"

В программировании важное место занимает условный оператор "если". С его помощью в программах организуется ветвление, поэтому его также называют оператором ветвления. Это значит, что при определенных условиях программа выполняется одним способом, а при отсутствии этих условий или наличии других условий программа выполняется другим способом, то есть идет по другому пути, другой ветке.

Допустим, в Scratch кот будет идти только в том случае, если нажата клавиша мыши. Если условие с мышкой не выполняется, кот никуда не пойдет. Чтобы реализовать такой сценарий, понадобиться блок "если … , то", который находится в оранжевом разделе "Управление".

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

Также можно представить, что логические выражения не спрашивают, а просто что-то утверждают. При этом то, что они утверждают, либо правда, либо ложь.

Блоки логических выражений не находятся в одном разделе. Их можно найти среди блоков как бирюзового раздела "Сенсоры", так и зеленого раздела "Операторы". В Scratch логические блоки имеют форму с острыми углами справа и слева.

В данном случае нам нужен блок "мышь нажата?", который мы вставляем в поле после слова "если" в оператор ветвления "если … , то".

Теперь, если клавиша на мышке будет зажата, будут выполняться команды, которые обрамляет блок "если мышка нажата, то". Но если клавиша на мышке не будет зажата, то команды внутри блока условного оператора выполняться не будут.

Сейчас внутри оператора ветвления, то есть в его теле, ничего нет. Поместим сюда команды движения, а сам блок "если" вставим в цикл "повторять всегда", чтобы программа работала всегда, пока мы ее сами не остановим.

В результате выполнения данного скрипта всегда будет проверяться, нажата ли какая-нибудь клавиша мышки. И если она нажата, кот будет перемещаться. Когда клавиша мыши будет отпускаться, спрайт будет останавливаться, потому что условие "мышка нажата?" станет неправдой.

А что будет, если мы поместим команды до или после всего блока "если". Влияет ли на них выполнение условия нажатия мышки? Абсолютно нет. Условие влияет только на те команды, которые находятся внутри "если". Команды за пределами "если" будут выполняться всегда.

Разместим команду "изменить эффект цвет на … " после блока "если".

Теперь кот будет мигать разными цветами независимо от того, стоит он или двигается. Блок изменения цвета находится за пределами условного оператора, а значит выполняется всегда.

Но допустим, мы хотим, чтобы кот изменял свой цвет только тогда, когда стоит. Когда же он двигается, цвет не должен меняться.

Эту задачу можно решить двумя способами. Добавить второй блок "если", в котором проверять обратное условие, то есть то, что мышка не нажата. Или же, что более правильно, воспользоваться условным оператором с двумя ветками, то есть блоком "если … иначе".

Рассмотрим сначала первый, не совсем верный, вариант:

Здесь мы используем новый для нас зеленый блок "не …", в который вставляем "мышка нажата?". Сложное логическое выражение "не мышка нажата?" (по смыслу следует понимать как "мышка не нажата?") помещаем в заголовок "если".

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

Рассмотрим второй вариант решения задачи, который делает то же самое что первый, но использует блок "если … иначе":

Этот вариант лучше первого не только потому, что содержит немного меньше команд. Важна логика. И здесь она более правильная.

Команды, вложенные в ветку "иначе" выполняются только тогда, когда условие при ветке "если" оказывается ложным. В данном случае если выражение "мышь нажата?" неправда, то будут выполняться команды внутри ветки "иначе".

Программе не надо два раза проверять условие нажатия мыши, как в первом варианте. За один оборот цикла она проверяет его единожды, в заголовке "если … иначе". И если условие правдиво, будут выполняться команды внутри ветки "если". Если условие оказывается ложным, то программа сразу без дополнительных проверок пойдет выполнять команды в ветке "иначе".

Выполняется либо то, либо другое. Никогда и то и другое. Не может быть, чтобы мышка одновременно была нажата и отпущена.

А как быть, если мы хотим, чтобы кот двигался налево, когда мы нажимаем на клавиатуре клавишу налево. И кот двигался бы направо, когда мы нажимаем клавишу направо. Можно решить задачу, используя два отдельных "если":

Однако мы также можем вложить второй "если" в ветку "иначе":

В данном случае в Scratch лучше работает первый вариант. Здесь если вы зажмете сразу две клавиши, кот никуда не будет идти, потому что шаг влево гасится шагом вправо. Во втором варианте, кот всегда будет предпочитать левую строну, так как в случае зажатия двух клавиш до ветки "иначе" поток выполнения просто не доходит.

Задание 1

Составьте программу с говорящим котом:

  1. Если зажимается клавиша 1 на клавиатуре, кот говорит "Один".

  2. Иначе, если нажимается клавиша 2 на клавиатуре, кот говорит "Два".

  3. Иначе, если нажимается клавиша 3 на клавиатуре, кот говорит "Три".

  4. Когда не нажимается ни одна клавиша клавиатуры, кот должен молчать.

Чтобы кот говорил, используйте команду "сказать Привет!" из фиолетового раздела "Внешний вид".

Задание 2

Помимо кота поместите на сцену божью коровку (Ladybug2). Составьте программу управления котом с помощью стрелок клавиатуры. Он должен уметь двигаться влево, вправо, вверх и вниз. Для божьей коровки добавьте сценарий изменения ее костюма, когда кот ее касается. Если же он отходит от нее, она возвращается к прежнему виду.

PDF-версия курса с ответами к заданиям


Программирование в Scratch. Курс




Все разделы сайта