Мягкое оценивание
Часть раздела Логика и управление потоком путешествия по Swift на Coddy. Урок 51 из 56.
Строгое равенство слишком сурово. В настоящих викторинах ответы paris, Paris и PARIS принимаются как одинаковые.
Рецепт из главы 1: удалите пробельные символы, приведите обе стороны к нижнему регистру и сравните:
func grade(_ given: String, _ answer: String) -> Bool {
let g = given.trimmingCharacters(in: .whitespaces).lowercased()
let a = answer.trimmingCharacters(in: .whitespaces).lowercased()
return g == a
}Такой вспомогательный код стоит вынести в отдельную функцию. Цикл викторины становится понятнее, когда на каждый вопрос приходится одна строка, а завтрашнее исправление ошибки нужно будет внести только в одном месте.
Задание
ЛегкоОпредели функцию grade(_ given: String, _ answer: String) -> Bool, которая возвращает true, если две строки совпадают после удаления пробельных символов и преобразования обеих строк в нижний регистр.
Начни программу с этого набора questions, такого же, как на предыдущем шаге:
let questions: [(String, String, String)] = [
("math", "2 + 2?", "4"),
("geo", "Capital of France?", "Paris"),
("science", "Color of grass?", "green")
]Считай три строки из stdin. Для каждого вопроса выведи:
- Текст вопроса
correctилиwrongв зависимости от сравнения с учетом допустимых различий
После выполнения выведи Score: <n>/3.
Для ввода 4 / PARIS / Green вывод будет таким:
2 + 2?
correct
Capital of France?
correct
Color of grass?
correct
Score: 3/3Попробуйте сами
let questions: [(String, String, String)] = [
("math", "2 + 2?", "4"),
("geo", "Capital of France?", "Paris"),
("science", "Color of grass?", "green")
]
// TODO: реализовать func grade(_:_:)->Bool со сравнением после удаления пробелов по краям и приведения к нижнему регистру
// затем в цикле выводить вопрос, считывать ответ и сообщать, правильный он или нет;
// закончить строкой 'Score: <n>/3'
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Строки в деталях
Подсчет и индексыРегистр и удаление пробеловПоиск в строкахРазделение и объединениеЗамена подстрокИтоги — Проверка имени пользователя4Множества
Создание множествОбъединение и пересечениеРазность и симметрическая разностьПодмножество и надмножествоИтоги — Фильтр тегов7Проект — Трекер привычек
Обзор проектаОтметить выполнение10Проект — Движок викторины
Обзор проектаЗадаем вопросы2Диапазоны и шаги
Закрытые и полуоткрытыеШагМетоды диапазоновДиапазоны в SwitchИтоги: Сетка календаряПотренируйтесь самостоятельно: Песочница Swift