1
resposta

Minha solução exercício 5, não sei se está correta.

z = 1
gabaritos = []

def confere_entrada(gabarito):
    gabarito_aceitavel =['A','B','C','D','E']
    for nota in gabarito:
        if nota not in gabarito_aceitavel:
            raise ValueError (f'O gabarito aceita somente as letras {gabarito_aceitavel}')
    
        

def confere_gabarito(Notas:list)->float:
    gabarito = ['D', 'A', 'B', 'C', 'A']
    resultado = []
    nota = 0
    for i in range(len(Notas)):
        nota = 0
        for x ,y in zip(Notas[i],gabarito):
            if x == y:
                nota += 1
        resultado.append(nota)
        
    for valor in resultado:
        pos_aluno = resultado.index(valor) + 1
        print(f'O {pos_aluno}º obteve nota {valor} em seu teste')

while True:
    try:
        gabarito = (input(f'Entre com o gabarito do {z}º aluno separados por espaço (Ex. a b c d e). Para sair digite (0)')).upper()
        if gabarito == '0':
            break
        gabarito = gabarito.strip()
        gabarito_aluno = gabarito.split(" ")
        confere_entrada(gabarito_aluno)
        gabaritos.append((gabarito_aluno))
        z += 1
    except ValueError as e:
        print(e)
   
confere_gabarito(gabaritos)
1 resposta

Oiii Daniella, tudo bem?

Seu código está muito bom e próximo do que é esperado. No entanto, existem alguns pontos que podemos ajustar para atender totalmente ao enunciado. Deixo abaixo os pontos de correção:

  • A verificação de alternativas válidas na função confere_entrada: a lista de alternativas válidas é ['A', 'B', 'C', 'D'], não ['A', 'B', 'C', 'D', 'E'], pois a alternativa "E" não faz parte das opções de resposta
  • Será necessário modificar também a mensagem com o exemplo aparesentado para o usuário no laço while True. Trocando de: "aluno separados por espaço (Ex. a b c d e)" para "aluno separados por espaço (Ex. a b c d)"
  • Exceção ValueError: a mensagem deve indicar a alternativa que foi inválida, e não apenas listar todas as alternativas possíveis

Aplicando essas correções, o seu código ficará da seguinte forma:

z = 1
gabaritos = []

def confere_entrada(gabarito):
    gabarito_aceitavel =['A','B','C','D']
    for nota in gabarito:
        if nota not in gabarito_aceitavel:
            raise ValueError(f'A alternativa "{nota}" não é uma opção de alternativa válida')      

def confere_gabarito(Notas:list)->float:
    gabarito = ['D', 'A', 'B', 'C', 'A']
    resultado = []
    nota = 0
    for i in range(len(Notas)):
        nota = 0
        for x ,y in zip(Notas[i],gabarito):
            if x == y:
                nota += 1
        resultado.append(nota)
        
    for valor in resultado:
        pos_aluno = resultado.index(valor) + 1
        print(f'O {pos_aluno}º obteve nota {valor} em seu teste')

while True:
    try:
        gabarito = (input(f'Entre com o gabarito do {z}º aluno separados por espaço (Ex. a b c d). Para sair digite (0)')).upper()
        if gabarito == '0':
            break
        gabarito = gabarito.strip()
        gabarito_aluno = gabarito.split(" ")
        confere_entrada(gabarito_aluno)
        gabaritos.append((gabarito_aluno))
        z += 1
    except ValueError as e:
        print(e)
   
confere_gabarito(gabaritos)

Espero ter ajudado. Conte com o apoio do Fórum na sua jornada. Fico à disposição.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado