Menu
Coddy logo textTech

유연한 채점

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
}

이런 종류의 헬퍼는 별도의 함수로 추출할 가치가 있습니다. 퀴즈 루프는 질문당 한 줄로 구성되어 가독성이 좋아지고, 추후 버그 수정도 한 곳에서만 하면 됩니다.

challenge icon

챌린지

쉬움

양쪽의 공백을 제거하고 소문자로 변환한 후 두 문자열이 일치하면 true를 반환하는 grade(_ given: String, _ answer: String) -> Bool 함수를 정의하세요.

questions 뱅크가 주어집니다. stdin에서 세 줄을 읽으세요. 각 질문에 대해 다음을 출력합니다:

  1. 질문 텍스트
  2. 관대한 비교(lenient comparison) 결과에 따른 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: trim + 소문자 비교를 포함한 func grade(_:_:)->Bool 구현
// 그 다음 루프를 돌며, 질문 출력, 답변 읽기, 정답/오답 여부 출력;
// 마지막에 'Score: <n>/3' 형식으로 종료
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

로직 및 흐름의 모든 레슨