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!