Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

Classificando estudantes por média

nota1 = float(input("Digite a primeira nota: ").replace(",", "."))
nota2 = float(input("Digite a segunda nota: ").replace(",", "."))
nota3 = float(input("Digite a terceira nota: ").replace(",", "."))
media = (nota1 + nota2 + nota3) / 3
print(f"Média final: {media:.2f}")
if media >= 7:
    print("Situação: Aprovado!")
elif 5 <= media < 7:
    print("Situação: Recuperação!") 
else:
    print("Situação: Reprovado!")
    
# USANDO FUNÇÃO
def obter_nota(ordem: str) -> float:
    while True:
        try:
            entrada = input(f"Digite a {ordem} nota (0 a 10): ").replace(",", ".")
            nota = float(entrada)

            if 0 <= nota <= 10:
                return nota
            print("Erro: A nota deve estar entre 0 e 10.")
        except ValueError:
            print("Erro: Digite apenas números válidos.")

def calcular_media(n1: float, n2: float, n3: float) -> float:
    return (n1 + n2 + n3) / 3

def verificar_situacao(media: float) -> str:
    if media >= 7.0:
        return "Aprovado"
    elif media >= 5.00:
        return "Recuperação"
    return "Reprovado"

def executar_sistema():
    print("--- SISTEMA DE NOTAS ESCOLAR ---")
    nota1 = obter_nota("primera")
    nota2 = obter_nota("segunda")
    nota3 = obter_nota("terceira")
    media_final = calcular_media(nota1, nota2, nota3)
    situacao = verificar_situacao(media_final)
    print("--- RESULTADO FINAL ---")
    print(f"Média do Aluno: {media_final:.2f}")
    print(f"Situação: {situacao}")

if __name__ == "__main__":
    executar_sistema()
1 resposta

Olá, Luísa. Como vai?

Parabéns pelo excelente código! Você foi muito além do básico proposto pelo exercício ao criar duas versões do sistema, sendo a segunda totalmente estruturada com funções, boas práticas de desenvolvimento e tratamentos de erros robustos.

Sua segunda solução está impecável e segue padrões dignos de projetos profissionais de mercado. É muito positivo destacar as excelentes escolhas que você fez no seu script:

  • Tratamento de Exceções com try/except: Ao encapsular a conversão de dados dentro de um bloco de tentativa e erro, você impede que o programa pare de funcionar (congele) caso o usuário digite uma letra ou um caractere inválido acidentalmente.
  • Validação de Intervalo de Dados: Garantir que a nota esteja estritamente entre 0 e 10 usando a condição if 0 <= nota <= 10: é uma regra de negócio essencial para a consistência dos dados do sistema escolar.
  • Uso de .replace(",", "."): Essa é uma sacada maravilhosa de experiência do usuário (UX). Como nós, brasileiros, estamos acostumados a separar centavos e casas decimais por vírgula, seu código evita um erro comum ao tratar essa entrada antes de convertê-la para float.
  • Tipagem de Dados (Type Hinting): Utilizar ordem: str -> float demonstra que você já está antenada com as boas práticas modernas do Python, facilitando a leitura do código por outros desenvolvedores.

Apenas como um detalhe visual de formatação no fórum (provavelmente devido à quebra de linha do próprio sistema na hora de colar), certifique-se de que os comandos print fiquem na linha abaixo de suas respectivas atribuições ou condições, e que o bloco principal esteja com a quebra correta:

if __name__ == "__main__":
    executar_sistema()
  • Desafio extra: Refatorando com Listas e Laços

Como você já demonstrou um domínio excelente em funções e estruturas de controle, um próximo passo muito legal para evoluir ainda mais esse código seria substituir as variáveis individuais (nota1, nota2, nota3) por uma única lista.

Se a escola decidir mudar a regra e passar a cobrar 4 notas em vez de 3, do jeito atual você teria que criar mais uma linha de código e alterar a fórmula da média. Usando uma lista dentro de um laço for, o seu código se adapta a qualquer quantidade de notas automaticamente:

def executar_sistema():
    print("--- SISTEMA DE NOTAS ESCOLAR ---")
    
    ordens = ["primeira", "segunda", "terceira"]
    notas = []
    
    for ordem in ordens:
        nota = obter_nota(ordem)
        notas.append(nota)
        
    # O sum() soma todas as notas da lista e o len() divide pela quantidade delas
    media_final = sum(notas) / len(notas)
    situacao = verificar_situacao(media_final)
    
    print("--- RESULTADO FINAL ---")
    print(f"Média do Aluno: {media_final:.2f}")
    print(f"Situação: {situacao}")

Com essa pequena modificação, o seu sistema se torna ainda mais flexível, escalável e fácil de manter! Continue compartilhando suas soluções inteligentes com a comunidade.

Espero que possa ter lhe ajudado!