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.
Aufgabe
MittelDerselbe 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:
- Eine Zeile pro Kategorie, alphabetisch sortiert, im Format
<category>: <right>/<total> - 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/6Spickzettel
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] += 1Gehen 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
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Kontrollfluss
1Strings im Detail
Zählen und IndizesGroß-/Kleinschreibung und TrimmenSuchen in StringsTeilen und ZusammenfügenTeilstrings ersetzenWiederholung – Benutzernamen-Check4Mengen
Mengen erstellenVereinigung und SchnittmengeDifferenz und symmetrische DifferenzTeilmenge und ObermengeRückblick – Tag-Filter7Projekt - Habit Tracker
ProjektübersichtAls erledigt markieren10Projekt – Quiz-Engine
ProjektübersichtFragen stellen2Bereiche & Schrittweiten
Geschlossen vs. halboffenSchrittweiteRange-MethodenRanges in SwitchRückblick – Kalender-Grid5Funktionen höherer Ordnung Teil 1
MapFilterReduceVerkettung von map, filter, reduceRückblick – Wortstatistiken