0
respostas

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.