1
resposta

Idando com excessões - Hora da prática

Projetos, questão #5:

def calcula_notas(gabarito, testes):
    notas = []
    alternativas_validas = ['A', 'B', 'C', 'D']
    
    try:
        for teste in testes:
            # Verifica se todas as alternativas são válidas
            for resposta in teste:
                if resposta not in alternativas_validas:
                    raise ValueError(f"A alternativa {resposta} não é uma opção de alternativa válida")
            
            # Calcula a nota do estudante
            nota = sum(1 for r, g in zip(teste, gabarito) if r == g)
            notas.append(nota)
    
    except ValueError as e:
        print("Erro:", e)
    
    else:
        # Executado apenas se não houver exceção
        print("Notas calculadas com sucesso:", notas)
    
    finally:
        # Sempre será executado
        print("Processo de cálculo finalizado.")
    
    return notas


# Gabarito da prova
gabarito = ['D', 'A', 'B', 'C', 'A']

# Teste sem exceção
testes_sem_ex = [['D', 'A', 'B', 'C', 'A'], 
                 ['C', 'A', 'A', 'C', 'A'], 
                 ['D', 'B', 'A', 'C', 'A']]

# Teste com exceção
testes_com_ex = [['D', 'A', 'B', 'C', 'A'], 
                 ['C', 'A', 'A', 'E', 'A'], 
                 ['D', 'B', 'A', 'C', 'A']]

print("### Teste sem exceção ###")
calcula_notas(gabarito, testes_sem_ex)

print("\n### Teste com exceção ###")
calcula_notas(gabarito, testes_com_ex)

Saída:

Teste sem exceção

Notas calculadas com sucesso: [5, 3, 3]
Processo de cálculo finalizado.

Teste com exceção

Erro: A alternativa E não é uma opção de alternativa válida
Processo de cálculo finalizado.

1 resposta

Oi, Aristóteles! Como vai?

Agradeço por compartilhar.

Seu código ficou bem organizado e mostra que você compreendeu o uso de try, except, else e finally no tratamento de exceções. A validação das alternativas antes do cálculo das notas também foi uma boa escolha, porque evita que respostas inválidas passem despercebidas.

Seu raciocínio está no caminho certo. Uma dica é observar que, quando uma exceção acontece, o laço é interrompido e as notas calculadas antes do erro podem ser retornadas parcialmente. Caso queira evitar esse retorno parcial, você pode retornar uma lista vazia ou tratar cada teste individualmente dentro do for, dependendo do comportamento esperado para a atividade.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!