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.
Desafío
IntermedioEl 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:
- Una línea por categoría, ordenada alfabéticamente, en el formato
<category>: <right>/<total> - 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/6Hoja 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] += 1Recorre 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
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
1Strings a fondo
Conteo e índicesMayúsculas, minúsculas y TrimBúsqueda en StringsDividir y unirReemplazo de subcadenasResumen: Validación de usuario4Conjuntos
Crear conjuntosUnión e intersecciónResta y diferencia simétricaSubconjunto y superconjuntoResumen - Filtro de etiquetas7Proyecto - Seguimiento de hábitos
Descripción general del proyectoMarcar como completado10Proyecto - Motor de cuestionarios
Descripción general del proyectoHacer preguntas2Rangos e Intervalos
Cerrados vs. SemiabiertosSaltos (Stride)Métodos de RangosRangos en SwitchResumen - Cuadrícula de calendario5Funciones de orden superior Pt. 1
MapFilterReduceEncadenar map, filter, reduceResumen - Estadísticas de palabras