Resolução de problemas · Guia Scraft
Desafios Python para construir sua própria solução
Em um desafio, você escolhe as ferramentas. O enunciado descreve o comportamento esperado, mas não entrega a sequência de comandos. Essa prática desenvolve decomposição: transformar uma tarefa maior em decisões pequenas que possam ser testadas separadamente.
Antes de começar
Pratique funções, listas, pares e dicionários em Python 3. Os testes pressupõem que você implemente montar_placar.
O que você vai praticar
- Decompor a construção de um placar em operações pequenas.
- Acumular valores por chave sem alterar a entrada.
- Validar nomes distintos, descontos, totais zero e uma entrada vazia.
Desafio: monte um placar de pontos
Receba uma lista de pares com nome e pontos. Some os pontos de cada nome e devolva um dicionário com os totais. Os nomes diferenciam maiúsculas e minúsculas; valores negativos representam descontos. Não altere a lista recebida e preserve jogadores cujo total seja zero.
Por exemplo, [("Ana", 10), ("Bia", 5), ("Ana", -2)] deve produzir {"Ana": 8, "Bia": 5}. Uma lista vazia produz um dicionário vazio. Antes de programar, calcule o total manualmente e observe quando um nome aparece pela primeira vez.
Divida o problema antes de escolher a sintaxe
Você precisa guardar um total por nome, percorrer os eventos e atualizar o total correspondente. Um dicionário é adequado porque associa uma chave a um valor. A escolha vem da operação que o problema pede, e não de uma preferência por uma estrutura mais avançada.
Um esboço em linguagem natural já ajuda: criar o placar vazio, visitar um evento, descobrir o total anterior, somar os pontos e guardar o novo total. Depois de percorrer tudo, retornar o placar. Converta uma etapa por vez em Python.
# Implemente montar_placar antes de executar estes testes.
assert montar_placar([]) == {}
assert montar_placar([("Ana", 4), ("Ana", -4)]) == {"Ana": 0}
assert montar_placar([("Ana", 2), ("ana", 3)]) == {"Ana": 2, "ana": 3}Aumente a dificuldade com uma regra por vez
Depois de passar nos testes, explique quantas vezes sua solução percorre os eventos. Se houver um laço completo para cada jogador, investigue se uma única passagem pelo histórico consegue produzir os mesmos totais.
Você pode criar uma segunda versão que ordene o placar, mas defina antes o desempate e o formato de saída. Misturar contagem, ordenação e apresentação de uma vez dificulta localizar erros. Na Scraft, a Revisão de IA complementa a trilha com investigação de código e testes; o primeiro caso é gratuito.
Do conceito ao código
Sua vez de praticar
Escreva contar_palavras(texto): separe por espaços em branco, ignore diferenças entre maiúsculas e minúsculas e retorne a frequência de cada palavra. Neste desafio, a pontuação faz parte da palavra.
Confira estes casos
- "Python python código": {"python": 2, "código": 1}.
- "": {}.
- "oi oi!": {"oi": 1, "oi!": 1}.
Preciso de uma dica
Comece com lower e split. Para cada palavra, atualize uma entrada no dicionário.