Menu
Coddy logo textTech

柔軟な採点

CoddyのSwiftジャーニー「ロジックとフロー」セクションの一部 — レッスン 51/56。

厳密な等価判定は厳しいものです。実際のクイズでは、parisParis、そして 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
}

これは、独自の関数として切り出す価値のあるヘルパーです。クイズのループは1問につき1行にすることでよりスッキリと読みやすくなり、将来のバグ修正も1箇所で行えるようになります。

challenge icon

チャレンジ

簡単

2つの文字列の両端の空白を削除し、小文字に変換した後に一致する場合に true を返す関数 grade(_ given: String, _ answer: String) -> Bool を定義してください。

questions バンクが与えられています。stdin から3行を読み込み、各質問に対して以下を出力してください:

  1. 質問のテキスト
  2. 寛容な比較に基づいた 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腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

ロジックとフローのすべてのレッスン