Menu
Coddy logo textTech

Relatório de Resumo

Parte da seção Lógica e Fluxo do Journey de Swift da Coddy — lição 53 de 56.

Funcionalidade final: em vez de apenas uma categoria, execute o quiz completo e gere um resumo por categoria ao final.

Você se apoiará em todos os capítulos de uma só vez: desestruturação de tuplas para a iteração, avaliação flexível do capítulo de strings, dicionários com subscrito padrão do capítulo de dicionários e iteração ordenada para uma saída determinística.

Construa os contadores por categoria como dois dicionários paralelos:

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

Incremente totals[cat, default: 0] += 1 para cada pergunta; incremente rights[cat, default: 0] apenas em uma resposta correta. Ao final, percorra as categorias em ordem alfabética para imprimir o relatório.

challenge icon

Desafio

Médio

O mesmo banco de seis perguntas da lição anterior. Leia seis respostas do stdin, uma por linha, na mesma ordem do banco. Use uma correção flexível (lenient grading).

Imprima, nesta ordem:

  1. Uma linha por categoria, ordenada alfabeticamente, no formato <category>: <right>/<total>
  2. Uma linha final: Total: <right>/<total> de toda a execução

Para a entrada 4 / 3.14 / Paris / Atlantic / green / WATER, a saída é:

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

Folha de consulta

Use dois dicionários paralelos para rastrear as pontuações por categoria:

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

// Para cada pergunta com a categoria cat:
totals[cat, default: 0] += 1
// Em caso de resposta correta:
rights[cat, default: 0] += 1

Percorra as categorias em ordem alfabética usando sorted() para uma saída determinística:

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

Calcule os totais de todas as categorias somando os valores do dicionário:

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

Experimente você mesmo

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: ler 6 respostas; avaliação flexível; construir totais/acertos por categoria;
// imprimir linhas de resumo ordenadas + Total
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Lógica e Fluxo