Laboratório — Refatoração em funções

Laboratório guiado com execução, observação, testes e solução completa: Laboratório — Refatoração em funções.

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

  1. Implemente validar_nota(nota) retornando bool.
  2. Implemente calcular_media(notas) com contrato de lista não vazia.
  3. Implemente classificar_media(media) retornando texto.
  4. Mantenha print() fora das funções de cálculo.
  5. Adicione docstrings curtas.
  6. Teste cada função isoladamente com pelo menos três casos.
  7. 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 opcional

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