Menu
Coddy logo textTech

Zusammenfassender Bericht

Teil des Abschnitts Logik & Kontrollfluss der Swift-Journey von Coddy — Lektion 53 von 56.

Abschließende Funktion: Führen Sie statt einer Kategorie das gesamte Quiz durch und erstellen Sie am Ende eine Zusammenfassung pro Kategorie.

Sie werden auf alle Kapitel gleichzeitig zurückgreifen: Tupel-Destructuring für die Iteration, „lenient grading“ aus dem Strings-Kapitel, Dictionaries mit Standard-Subskripten aus dem Dictionaries-Kapitel und sortierte Iteration für eine deterministische Ausgabe.

Erstellen Sie die Zähler pro Kategorie als zwei parallele Dictionaries:

var totals: [String: Int] = [:]
var rights: [String: Int] = [:]

Erhöhe totals[cat, default: 0] += 1 für jede Frage; erhöhe rights[cat, default: 0] nur bei einer richtigen Antwort. Gehe am Ende die Kategorien in alphabetischer Reihenfolge durch, um den Bericht auszugeben.

challenge icon

Aufgabe

Mittel

Derselbe Fragenkatalog mit sechs Fragen aus der vorherigen Lektion. Lies sechs Antworten von stdin ein, eine pro Zeile, in der gleichen Reihenfolge wie im Katalog. Verwende eine tolerante Bewertung.

Gib in dieser Reihenfolge Folgendes aus:

  1. Eine Zeile pro Kategorie, alphabetisch sortiert, im Format <category>: <right>/<total>
  2. Eine abschließende Zeile: Total: <right>/<total> über den gesamten Durchlauf

Für die Eingabe 4 / 3.14 / Paris / Atlantic / green / WATER lautet die Ausgabe:

geo: 1/2
math: 2/2
science: 2/2
Total: 5/6

Spickzettel

Verwenden Sie zwei parallele Dictionaries, um die Punktzahlen pro Kategorie zu verfolgen:

var totals: [String: Int] = [:]
var rights: [String: Int] = [:]

// Für jede Frage mit der Kategorie cat:
totals[cat, default: 0] += 1
// Bei richtiger Antwort:
rights[cat, default: 0] += 1

Gehen Sie die Kategorien in alphabetischer Reihenfolge mit sorted() durch, um eine deterministische Ausgabe zu erhalten:

for cat in totals.keys.sorted() {
    let r = rights[cat, default: 0]
    let t = totals[cat]!
    print("\(cat): \(r)/\(t)")
}

Berechnen Sie die Gesamtsummen über alle Kategorien hinweg, indem Sie die Dictionary-Werte addieren:

let totalRight = rights.values.reduce(0, +)
let totalAll = totals.values.reduce(0, +)
print("Total: \(totalRight)/\(totalAll)")

Probier es selbst

let questions: [(String, String, String)] = [
    ("math", "2 + 2?", "4"),
    ("math", "Value of pi to 2 decimals?", "3.14"),
    ("geo", "Capital of France?", "Paris"),
    ("geo", "Largest ocean?", "Pacific"),
    ("science", "Color of grass?", "green"),
    ("science", "H2O is?", "water")
]

// TODO: 6 Antworten lesen; milde Bewertung; Summen/korrekte Antworten pro Kategorie erstellen;
// sortierte Zusammenfassungszeilen + Gesamt ausgeben
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Kontrollfluss