Menu
CoddyTech

柔軟な採点

CoddyのSwiftジャーニー「ロジックとフロー」セクションの一部。レッスン 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
}

これは、独立した関数に切り出す価値のある種類のヘルパーです。クイズのループは質問ごとに1行になって読みやすくなり、明日のバグ修正も1か所で済みます。

challenge icon

チャレンジ

簡単

両方の文字列の空白を削除し、小文字に変換した後に一致する場合に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")
]

標準入力から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

自分で試してみよう

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腕試し

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

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

自分で練習してみよう: Swiftプレイグラウンド