Вопросы:
· Тесты с записью ответа.
· Тесты с выбором правильного ответа.
Прежде чем начать создавать тесты, нужно уточнить, что это такое. Слово «тест» пришло к нам из английского языка и переводится как «испытание» или «проверка». Чаще всего, слыша слово «тест», мы вспоминаем о школьных тестах, которые проверяют знания учеников. Обычно они представляют собой набор вопросов, на которые ученик должен ответить. Для вопросов могут быть даны варианты ответа, но их может и не быть.
Подумаем о своём тесте. Сделаем так, чтобы пользователь вводил ответы с клавиатуры. Тогда на ум приходит, что ответом на вопрос теста будет слово или несколько слов. Но здесь может быть проблема. Несколько вариантов ответа могут быть правильными. Может измениться порядок слов или они могут быть записаны в другом падеже. Поэтому немного схитрим и сделаем такой тест, в котором ответами будут числа. Тогда ответы можно записать просто с помощью цифр. Пример вопроса для такого теста: «Сколько месяцев в году?».
Создадим такой тест в Scratch. Сперва создадим несколько списков. Первый список назовём «Вопросы». В нём будут храниться тексты вопросов. Второй список назовём «Ответы». В каждом элементе этого списка будет храниться число – ответ на вопрос, который хранится в списке «Вопросы» в элементе с тем же индексом. Мы сразу же можем заполнить списки. Добавим в список «Вопросы» 5 вопросов, например: «Сколько месяцев в году?», «Сколько дней было дано героям на кругосветное путешествие в одном из романов Жюля Верна?», «Сколько килограммов в тонне?», «Сколько километров в тысяче метров?» и «Сколько братьев было у Ивана-Царевича в сказке “Царевна-Лягушка”?». Дальше внесём ответы на эти вопросы в список ответов. В году двенадцать месяцев, внесём число двенадцать в список «Ответы». Ответ на следующий вопрос – восемьдесят. Именно столько дней было дано на кругосветное путешествие главному герою романа «Вокруг света за восемьдесят дней». В одной тонне тысяча килограммов. В тысяче метров один километр. В сказке «Царевна-лягушка» у Ивана-Царевича два брата. Спрячем созданные списки. Не нужно, чтобы пользователь их видел.
Так мы заполнили списки с вопросами и ответами. Теперь сделаем из всего этого тест. Пусть вопросы задаёт Царапка, поэтому его спрайт убирать не будем. Сделаем так, чтобы тест запускался при нажатии на зелёный флажок. Так как нужно задать несколько вопросов один за другим, добавим в скрипт цикл «Повторить». Цикл должен отработать столько раз, сколько есть вопросов. Для этого количество повторений установим равным длине списка «Вопросы».
Задавать вопросы и принимать ответы будем с помощью блока «Спросить и ждать». Спрячем спрайт Царапки, чтобы вопросы отображались над рамкой для ответа. Текст вопроса мы должны брать из списка «Вопросы». Чтобы знать, к какому элементу списка обращаться, создадим переменную, которую назовём «Номер вопроса». В ней будем хранить индекс текущего вопроса. Перед циклом установим ей значение 1. В блоке «Спросить и ждать» зададим вопрос из списка «Вопросы» из элемента, индекс которого хранится в переменной «Номер вопроса». После того как мы задали вопрос, для перехода к следующему увеличим значение переменной «Номер вопроса» на единицу.
Теперь если запустить скрипт, то по одному будут задаваться вопросы и приниматься ответы. Остаётся только научить скрипт считать правильные ответы. Для этого создадим переменную, которую назовём «Счёт». В ней будет храниться количество вопросов, на которые тестируемый ответил правильно. В начале скрипта зададим ей значение 0. Перед увеличением номера вопроса на единицу добавим в скрипт блок для сокращённой формы ветвления. Он будет работать, если ответ тестируемого на вопрос совпадает с правильным. Для этого установим в условие блок равенства, в котором будем проверять, равно ли значение датчика «Ответ» элементу списка «Ответы» с индексом, который хранится в переменной «Номер вопроса». В этом случае увеличим значение переменной «Счёт» на 1.
В конце теста нужно как-то оценить ответы тестируемого. Однако просто вывести счёт недостаточно. Ведь тогда для оценки нужно знать и количество заданных вопросов, а пользовать мог их не считать. Поэтому будем рассчитывать рейтинг пользователя в процентах. Для этого создадим переменную, которую назовём «Рейтинг». После цикла установим её значение. Чтобы рассчитать рейтинг, разделим счёт тестируемого на общее количество вопросов, равное длине списка «Вопросы», и умножим получившееся число на 100. Так мы получим рейтинг тестируемого. Чтобы его вывести, отобразим спрайт Царапки и добавим в скрипт блок «Сказать», в котором Царапка будет сообщать, что тест завершён и какой рейтинг у тестируемого. При этом не забудем спрятать спрайт Царапки при новом запуске теста.
Запустим тест. Верно ответим на все вопросы. Появился Царапка и сообщает о том, что тест окончен и наш рейтинг – 100 %. Еще раз запустим тест и ответим на один из пяти вопросов неправильно. Теперь наш рейтинг – 80 %. Наш тест работает правильно. Сохраним проект в нашей рабочей папке под именем «Тест Сколько». Назовём его так потому, что все вопросы в нём начинаются со слова «Сколько».
Итак, наш тест вычисляет рейтинг испытуемого как процент правильных ответов. Но при этом есть проблема. Какие-то вопросы могут быть сложнее, а какие-то легче, при этом оцениваются ответы одинаково. Поэтому немного изменим тест так, чтобы вопросы оценивались по-разному. Например, можно за каждый ответ начислять разное количество очков. Создадим ещё один список, который назовём «Очки». В каждом элементе этого списка запишем число очков, которое будет начисляться на вопрос под этим номером.
Теперь изменим блок, в котором увеличивается счёт игрока. В этот раз мы будем увеличивать его не на единицу, а на элемент списка «Очки» с индексом «Номер». Теперь нужно изменить подсчёт рейтинга после цикла. Мы будем вычислять его как процент набранных очков от их максимально возможного количества. Для этого создадим переменную, которую назовём «Максимум очков». В ней вычислим максимально возможное количество очков. Для этого перед циклом установим её равной нулю, а в цикле, перед ветвлением, будем увеличивать её значение на значение элемента списка «Очки» с индексом «Номер». Так после цикла в этой переменной будет максимальное количество очков, которые можно набрать за тест. В формуле вычисления рейтинга заменим длину списка «Вопросы» на значение переменной «Максимум очков».
Снова запустим тест. И ответим в нём правильно на все вопросы. Наш рейтинг – 100 %. Снова запустим тест и ответим на все вопросы неправильно. Теперь наш рейтинг – 0 %. Ещё раз запустим тест на выполнение и ответим неправильно лишь на некоторые вопросы. Теперь рейтинг больше нуля и меньше ста процентов. Тест работает правильно. Сохраним его.
Кроме тестов, в которых испытуемый должен ввести ответы с клавиатуры, распространены тесты, в которых нужно выбрать правильные ответы из предложенных. В самом простом варианте это могут быть вопросы, на которые нужно ответить «Да» или «Нет». Сделаем такой тест. Прежде всего для этого изменим содержимое списков «Вопросы», «Ответы» и «Очки». В список «Вопросы» запишем пять вопросов с ответами «Да» или «Нет». Например: «Крокодилы летают?», «На Южном полюсе холодно?», «Тонна меньше центнера?», «Слон больше кота?» и «Гусеница старше бабочки?». В списке «Ответы» запишем ответы на вопросы. Крокодилы не летают, поэтому ответ на первый вопрос – «Нет». На Южном полюсе действительно холодно, поэтому следующий ответ – «Да». Тонна больше центнера, слон больше кота, а гусеница действительно старше бабочки. Количество очков за каждый вопрос пусть остаётся прежним. Спрячем списки.
Добавим на сцену спрайты кнопок. Загрузим их из нашей рабочей папки из файлов «Кнопка да» и «Кнопка нет». Дальше установим подходящие размеры кнопок и поставим их чуть ниже спрайта Царапки. Начнём составление скриптов. Сперва создадим ещё одну переменную, которую назовём «Ответ испытуемого». Для кнопки «Да» составим скрипт, который будет срабатывать при нажатии на неё. Так как ответ будет задаваться с помощью кнопок, создадим ещё одну переменную, которую назовём «Ответ тестируемого». В скрипте установим для переменной значение «Да». После того, как мы задали ответ, с помощью блока «Передать и ждать» передадим сообщение «Ответ получен». Скопируем этот скрипт для спрайта кнопки «Нет». Для этого перетащим его на соответствующую иконку в поле спрайтов. В варианте скрипта для кнопки «Нет» для переменной «Ответ испытуемого» установим значение «Нет».
Дальше изменим скрипт Царапки. Прежде всего уберём из него блоки «Спрятаться» и «Показаться». Остальной скрипт разделим на три части. В первой части будут команды, которые идут перед циклом, они задают начальные значения переменных. Во второй части будет содержимое цикла. И в третьей части будут команды подсчёта рейтинга и его вывода. Блок цикла удалим. Он нам не нужен. В конец первой части поместим блок «Сказать», в котором будет вопрос с заданным номером.
Дальше уберём из второй части блок «Спросить и ждать». В этом варианте теста он не нужен. Сделаем так, чтобы вторая часть запускалась при получении сообщения «Ответ получен». В ветвлении заменим датчик ответа на переменную «Ответ испытуемого». В конец второй части добавим блок для полной формы ветвления. Он должен сработать при окончании теста. Поэтому в качестве условия зададим то, что указатель «Номер» вышел за границы списка «Вопросы», то есть стал больше его длины. В этом случае отправим сообщение «Конец». Если же указатель ещё не вышел за границы списка, то с помощью блока «Сказать» выведем на экран следующий вопрос с соответствующим номером. Третья часть будет запускаться при получении сообщения «Конец».
Дальше для правильной работы теста добавим для кнопки «Да» ещё несколько скриптов. Прежде всего у тестируемого не должно быть возможности дать какой-нибудь ответ после окончания теста. Поэтому при получении сообщения «Конец» мы будем прятать кнопку с помощью блока «Спрятаться». Соответственно нужно сделать так, чтобы она появлялась при следующем запуске теста. Для этого добавим скрипт, который будет запускаться при нажатии на зелёный флажок. В нём кнопка будет отображаться при помощи блока «Показаться». Скопируем два новых скрипта для кнопки «Нет».
Запустим тест в режиме презентации. Ответим на все вопросы правильно. Царапка говорит, что наш рейтинг – 100 %. Ещё раз запустим тест. Ответим на несколько вопросов неправильно. Наш рейтинг стал меньше ста процентов. Тест работает правильно. Сохраним проект под именем «Тест с выбором ответа». Похожим образом можно сделать и тест с выбором из большего количества вариантов.
Сегодня мы ещё раз применили навыки работы со списками на практике. Также рассмотрели ещё одно применение списков и научились делать тесты в Scratch.