Menu
Coddy logo textTech

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.

challenge icon

Défi

Moyen

La 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 :

  1. Une ligne par catégorie, triée par ordre alphabétique, au format <category>: <right>/<total>
  2. 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/6

Aide-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] += 1

Parcourez 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
quiz iconTestez-vous

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