Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Classificando estudantes por média

def calc_nota():
    while True:
        try:
            nota1 = float(input("Digite a primeira nota: "))
            nota2 = float(input("Digite a segunda nota: "))
            nota3 = float(input("Digite a terceira nota: "))
        except ValueError:
            print("Digite apenas números.")
            continue
        
        media = (nota1 + nota2 + nota3) / 3

        if media >= 7:
            print("Aprovado")
        elif 5 <= media < 7:
            print("Recuperação")
        else:
            print("Reprovado")

        break


calc_nota()
1 resposta
solução!

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!