Ввод данных

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

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

Вспомним один из скриптов прошлого занятия:

Изменение значения переменной

Если мы хотим предоставить человеку самому определять скорость, а не ограничивать ее только тремя вариантами, код станет проще:

Ввод данных

Когда выполняется команда "спросить … и ждать", на сцене появляется поле, куда пользователь должен что-то ввести и нажать Enter на клавиатуре. Также он может ничего не вводить, а просто нажать Enter.

Поле для ввода данных на сцене

В Scratch команда "спросить … и ждать" блокирует свой скрипт, но не другие. Блокирует она свой скрипт до тех пор, пока не будет нажат Enter в поле ввода. После этого то, что было введено в поле, присваивается встроенной переменной "ответ", которая далее используется в скрипте.

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

Допустим, мы хотим, чтобы в случае ввода текста, скрипт не пыталась его подставлять в команду "идти … шагов". Вместо этого на сцене появлялось бы сообщение о неправильном вводе.

В Scratch нет команды проверки, введено число или строка. Однако можно придумать способ это узнать. В Scratch если выполнить над строкой арифметическую операцию, то результатом будет число 0. Например, если взять из положительного числа модуль, то вернется само число. Если же попытаться взять модуль из строки, что бессмысленно, будет получен 0.

Таким образом, если модуль ответа не совпадает с самим ответом, значит было введено что-то не то: либо строка, либо отрицательное число. Если же модуль ответа совпадает с самим ответом, значит было введено положительное число.

Проверка, что введено число

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

Во первых, каждое число можно присваивать отдельной переменной, а потом выводить их сумму.

Сложение значений трех переменных

Второй вариант – создать одну переменную, в которой постепенно накапливать сумму.

Добавление числа к переменной

Когда выполняется команда "задать <сумма> значение <сумма + ответ>", сначала выполняется подвыражение <сумма + ответ>. И только после этого результат этого подвыражения записывается в переменную "сумма".

Например, переменная "сумма" содержит число 3. Пользователь вводит число 5. Когда выполняется выражение <сумма + ответ>, из переменной "сумма" извлекается число 3 и к нему добавляется 5. После этого результат 8 записывается в переменную "сумма". Старое значение 3 переменной при этом затирается, то есть теряется.

Задания

  1. Составьте программу, в которой пользователь вводит координаты точки. После этого спрайт переходит в указанную точку, ждет секунду и опять запрашивает новые координаты.

  2. В системе зарегистрированы три пользователя – Вася, Петя и Варя. Если в систему пытается войти один из них, кот его приветствует, говоря его имя, к которому добавляет слово "привет". Если в систему пытается проникнуть посторонний, кот включает аварийную сигнализацию, то есть мяукает.

Курс с ответами к заданиям и двумя дополнительными уроками:
PDF-версия, android-приложение

Комментарии

Модуль - это всего лишь частный случай. Скорость можно задать и отрицательным числом, спрайт в этом случае будет пятиться назад. А проверка по модулю выдаст ошибку.