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.
Desafio
MédioO 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:
- Uma linha por categoria, ordenada alfabeticamente, no formato
<category>: <right>/<total> - 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/6Folha 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] += 1Percorra 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
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
1Strings a Fundo
Contagem e ÍndicesCase e TrimBusca em StringsDivisão e JunçãoSubstituindo SubstringsRecapitulação - Verificação de Nome de Usuário4Conjuntos
Criando ConjuntosUnião e InterseçãoSubtração e Diferença SimétricaSubconjunto e SuperconjuntoRecapitulação - Filtro de Tags7Projeto - Monitor de Hábitos
Visão Geral do ProjetoMarcar como Concluído10Projeto - Mecanismo de Quiz
Visão Geral do ProjetoFazer Perguntas2Intervalos e Strides
Fechado vs Meio-AbertoStrideMétodos de IntervaloIntervalos no SwitchRecapitulação - Grade de Calendário5Funções de Ordem Superior Parte 1
MapFilterReduceEncadeando map, filter, reduceRecapitulação - Estatísticas de Palavras