Estava fazendo a questão 5 e decidi me desafiar um pouco mais colocando algumas coisas a mais, como por exemplo qual foi a questão marcada errada e qual aluno que marcou(a questão só pede a alternativa originalmente), por em quanto só consegui fazer até o primeiro erro. Queria mesmo que ele retornasse todos as marcadas erradas para que assim o professor pudesse dizer aos alunos quais questões eles marcaram erradas.
def avaliador(l1: list) -> list:
gabarito = ['D', 'A', 'B', 'C', 'A']
opcoes_validas = list(set(gabarito))
notas = []
try:
'''
Estava utilizando .index para localizar qual aluno era mas se por acaso o aluno 2 tivesse colado do aluno 1, o indice retornado com o .index iria repetir a do aluno 1, pq ele pega o primeiro valor a aparecer.
for i in range(len(l1)): #aqui pegamos as listas de alternativas do aluno i.
for x in l1[i]: #aqui pegamos as alternativas uma por uma que o aluno i escolheu.
if x not in opcoes_validas: #aqui verifico se a opçao que o aluno escolheu não pertence a lista que criei com as alternativas possiveis.
raise ValueError(f"A alternativa {x} da questão {l1[i].index(x)+1}, do aluno {i+1} não é uma opção de alternativa válida.")
'''
for i, respostas in enumerate(l1):
for x, alternativas in enumerate(respostas):
if alternativas not in opcoes_validas:
raise ValueError(f"A alternativa {alternativas} da questão {x+1}, do aluno {i+1} não é uma opção de alternativa válida.")
except Exception as e:
print(f'Erro: {e}')
else:
for i in range(len(l1)):
notas.append([1 if x == y else 0 for x,y in zip(l1[i],gabarito)])
notas[i] = sum(notas[i])
return notas