Laboratório — Refatoração em funções
Por que este laboratório existe
Você receberá um programa monolítico e o dividirá em funções pequenas com parâmetros, retornos e contratos claros.
Objetivo
Praticar decomposição, return, escopo e teste de funções.
Importante: não tente terminar rápido. O objetivo é observar o que acontece em cada etapa. Se algo falhar, registre a entrada, a mensagem e a correção.
Preparação
- Crie
ft002-m06-lab/refatoracao.py. - Comece pela versão monolítica e confirme que ela funciona.
- Refatore uma responsabilidade por vez.
Código inicial
notas = [8.0, 7.5, 9.0]
# Refatore cálculo, validação e classificação em funções.
Procedimento passo a passo
- Implemente
validar_nota(nota)retornando bool. - Implemente
calcular_media(notas)com contrato de lista não vazia. - Implemente
classificar_media(media)retornando texto. - Mantenha
print()fora das funções de cálculo. - Adicione docstrings curtas.
- Teste cada função isoladamente com pelo menos três casos.
- Monte um pequeno fluxo principal usando os resultados retornados.
Uma solução completa para comparar depois da tentativa
Tente primeiro sem consultar esta seção. Depois compare a sua versão com a solução e identifique diferenças de raciocínio, não apenas diferenças de nomes.
def validar_nota(nota):
"""Retorna True para notas entre 0 e 10, inclusive."""
return 0 <= nota <= 10
def calcular_media(notas):
"""Retorna média de uma lista não vazia de notas."""
return sum(notas) / len(notas)
def classificar_media(media):
"""Retorna situação acadêmica simplificada."""
if media >= 7:
return "aprovado"
return "reprovado"
notas = [8.0, 7.5, 9.0]
if notas and all(validar_nota(nota) for nota in notas):
media = calcular_media(notas)
print(f"Média: {media:.2f}")
print("Situação:", classificar_media(media))
else:
print("Conjunto de notas inválido")
Resultado esperado
As funções de regra devem ser chamáveis sem input e sem depender de variáveis globais mutáveis.
Checklist de validação
- Consigo executar o programa do início ao fim.
- Consigo explicar o papel de cada variável, condição, laço ou função que usei.
- Testei pelo menos um caso normal, um caso de fronteira e um caso problemático quando aplicável.
- Li e entendi qualquer mensagem de erro encontrada, em vez de apenas apagar a linha.
- Meu código usa nomes que descrevem os dados e mantém entrada, regra e saída compreensíveis.
Desafio extra
Crie testes manuais para 6.99, 7.0 e 10.0 e explique por que são importantes.
Critério de conclusão
Considere o laboratório concluído apenas quando você conseguir recriar a parte principal sem copiar e explicar por que cada etapa existe. “Funcionou uma vez” não é o mesmo que “eu entendi”.
Avaliação com validação humana
Receba nota e feedback individual sobre esta atividade. Este serviço é opcional e não é necessário para concluir o curso ou receber o certificado gratuito.
Entrar para solicitar