Menu
Coddy logo textTech

Informe de resumen

Parte de la sección Lógica y Flujo del Journey de Swift de Coddy — lección 53 de 56.

Funcionalidad final: en lugar de una sola categoría, ejecuta el cuestionario completo y genera un resumen por categoría al final.

Te apoyarás en todos los capítulos a la vez: desestructuración de tuplas para la iteración, calificación flexible del capítulo de cadenas, diccionarios con subíndices por defecto del capítulo de diccionarios e iteración ordenada para una salida determinista.

Construye los contadores por categoría como dos diccionarios paralelos:

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

Incrementa totals[cat, default: 0] += 1 por cada pregunta; incrementa rights[cat, default: 0] solo en caso de una respuesta correcta. Al final, recorre las categorías en orden alfabético para imprimir el informe.

challenge icon

Desafío

Intermedio

El mismo banco de seis preguntas de la lección anterior. Lee seis respuestas desde stdin, una por línea, en el mismo orden que el banco. Utiliza una calificación flexible.

Imprime, en este orden:

  1. Una línea por categoría, ordenada alfabéticamente, en el formato <category>: <right>/<total>
  2. Una línea final: Total: <right>/<total> de toda la ejecución

Para la entrada 4 / 3.14 / Paris / Atlantic / green / WATER, la salida es:

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

Hoja de referencia

Usa dos diccionarios paralelos para realizar un seguimiento de las puntuaciones por categoría:

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

// Para cada pregunta con la categoría cat:
totals[cat, default: 0] += 1
// En caso de respuesta correcta:
rights[cat, default: 0] += 1

Recorre las categorías en orden alfabético usando sorted() para obtener una salida determinista:

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

Calcula los totales de todas las categorías sumando los valores de los diccionarios:

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

Pruébalo tú mismo

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: leer 6 respuestas; calificación flexible; construir totales/aciertos por categoría;
// imprimir líneas de resumen ordenadas + Total
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y Flujo