유연한 채점
Coddy Swift 여정의 로직과 흐름 섹션에 포함된 레슨. 56개 중 51번째.
엄격한 동등성은 까다롭습니다. 실제 퀴즈에서는 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
}이런 종류의 도우미는 별도의 함수로 분리할 가치가 있습니다. 퀴즈 반복문은 질문마다 한 줄씩 쓰면 더 깔끔하게 읽히고, 내일 버그를 수정할 때도 한 곳만 고치면 됩니다.
챌린지
쉬움공백을 제거하고 양쪽을 모두 소문자로 변환한 뒤 두 문자열이 일치하면 true를 반환하는 함수 grade(_ given: String, _ answer: String) -> Bool을 정의하세요.
이전 단계와 동일한 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'로 마무리
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
로직과 흐름의 모든 레슨
직접 연습해 보세요: Swift 플레이그라운드