Olá, Vinicius. Como vai?
Parabéns pelo código! Você foi muito além do básico ao implementar uma estrutura de tratamento de exceções com o try-except e um laço while True para garantir que o programa não quebre caso o usuário digite um texto em vez de um número. Essa é uma excelente prática de programação e mostra muita atenção aos detalhes.
O seu uso das condicionais if, elif e else para classificar os estudantes de acordo com a média está impecável e funciona perfeitamente.
Para agregar ainda mais valor ao seu aprendizado, preparei algumas sugestões de melhorias e boas práticas que você pode aplicar para deixar seu código ainda mais elegante e robusto:
1. Exibir o valor da média para o usuário
Atualmente, o código exibe apenas o status ("Aprovado", "Recuperação" ou "Reprovado"). Seria interessante mostrar também a média calculada, arredondando para uma ou duas casas decimais utilizando f-strings.
2. Modularização (Separação de Responsabilidades)
Uma boa prática no desenvolvimento de software é fazer com que cada função tenha apenas uma responsabilidade. A sua função calc_nota() faz o input, o tratamento de erro, o cálculo da média, a lógica de classificação e o output de dados. Podemos separar isso em funções menores.
Veja um exemplo de como o código ficaria aplicando essas melhorias:
def obter_nota(mensagem):
while True:
try:
return float(input(mensagem))
except ValueError:
print("Entrada inválida! Digite apenas números.")
def classificar_estudante(media):
if media >= 7:
return "Aprovado"
elif 5 <= media < 7:
return "Recuperação"
else:
return "Reprovado"
def executar_sistema():
print("--- Sistema de Notas ---")
nota1 = obter_nota("Digite a primeira nota: ")
nota2 = obter_nota("Digite a segunda nota: ")
nota3 = obter_nota("Digite a terceira nota: ")
media = (nota1 + nota2 + nota3) / 3
status = classificar_estudante(media)
# Exibindo a média formatada com duas casas decimais (.2f)
print(f"\nMédia final: {media:.2f}")
print(f"Status do estudante: {status}")
# Executa o programa
executar_sistema()
O que mudou aqui?
- Reutilização de código: Criamos a função
obter_nota apenas para validar a entrada. Com isso, não precisamos repetir o bloco try-except três vezes ou colocar tudo dentro de um grande laço. - Legibilidade: A lógica de classificação ficou isolada na função
classificar_estudante, facilitando caso as regras de média mudem no futuro.
Seu raciocínio lógico está excelente. Continue praticando e explorando essas estruturas!
Espero que possa ter lhe ajudado!