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