Rapport de synthèse
Fait partie de la section Logique et Flux du Journey Swift de Coddy — leçon 53 sur 56.
Dernière fonctionnalité : au lieu d'une seule catégorie, lancez l'intégralité du quiz et produisez un résumé par catégorie à la fin.
Vous vous appuierez sur tous les chapitres à la fois : la déstructuration de tuples pour l'itération, l'évaluation indulgente du chapitre sur les chaînes de caractères, les dictionnaires avec indice par défaut du chapitre sur les dictionnaires, et l'itération triée pour un résultat déterministe.
Construisez les compteurs par catégorie sous la forme de deux dictionnaires parallèles :
var totals: [String: Int] = [:]
var rights: [String: Int] = [:]Incrémentez totals[cat, default: 0] += 1 pour chaque question ; incrémentez rights[cat, default: 0] uniquement lors d'une réponse correcte. À la fin, parcourez les catégories par ordre alphabétique pour imprimer le rapport.
Défi
MoyenLa même banque de six questions que dans la leçon précédente. Lisez six réponses depuis stdin, une par ligne, dans le même ordre que la banque. Utilisez une notation indulgente.
Affichez, dans cet ordre :
- Une ligne par catégorie, triée par ordre alphabétique, au format
<category>: <right>/<total> - Une ligne finale :
Total: <right>/<total>pour l'ensemble de l'exercice
Pour l'entrée 4 / 3.14 / Paris / Atlantic / green / WATER, la sortie est :
geo: 1/2
math: 2/2
science: 2/2
Total: 5/6Aide-mémoire
Utilisez deux dictionnaires parallèles pour suivre les scores par catégorie :
var totals: [String: Int] = [:]
var rights: [String: Int] = [:]
// Pour chaque question avec la catégorie cat :
totals[cat, default: 0] += 1
// En cas de bonne réponse :
rights[cat, default: 0] += 1Parcourez les catégories par ordre alphabétique en utilisant sorted() pour un résultat déterministe :
for cat in totals.keys.sorted() {
let r = rights[cat, default: 0]
let t = totals[cat]!
print("\(cat): \(r)/\(t)")
}Calculez les totaux pour toutes les catégories en additionnant les valeurs des dictionnaires :
let totalRight = rights.values.reduce(0, +)
let totalAll = totals.values.reduce(0, +)
print("Total: \(totalRight)/\(totalAll)")Essayez vous-même
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: lire 6 réponses ; notation indulgente ; calculer les totaux/bonnes réponses par catégorie ;
// afficher les lignes de résumé triées + Total
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Logique et Flux
1Les chaînes de caractères en profondeur
Comptage et indicesCasse et nettoyageRecherche dans les chaînesDécoupage et jointureRemplacement de sous-chaînesRécapitulatif - Vérification du nom d'utilisateur4Ensembles
Création d'ensemblesUnion et intersectionSoustraction et différence symétriqueSous-ensemble et sur-ensembleRécapitulatif - Filtre de tags7Projet - Suivi d'habitudes
Aperçu du projetMarquer comme terminé10Projet - Moteur de quiz
Présentation du projetPoser des questions2Intervalles et Pas
Fermé vs Semi-ouvertLe PasMéthodes d'intervalleIntervalles dans un SwitchRécapitulatif - Grille de calendrier5Fonctions d'ordre supérieur, Partie 1
MapFilterReduceChaînage de map, filter, reduceRécapitulatif - Statistiques de mots