柔軟な採点
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か所で済みます。
チャレンジ
簡単両方の文字列の空白を削除し、小文字に変換した後に一致する場合に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行読み込みます。各問題について、次の内容を出力します。
- 問題文
- 寛容な比較に基づく
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' を表示する
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
ロジックとフローのすべてのレッスン
自分で練習してみよう: Swiftプレイグラウンド