Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] questão 5

fiz meu código pensando em uma saída no formato o aluno {aluno} tirou {nota_final}/5

def correcao(gabarito, notas):
  try:
    for aluno in range(0, 3):
      nota = []
      for i in range(len(gabarito)):
        if notas[aluno][i] not in ['A','B','C','D']:
          raise ValueError(f'A alternativa {notas[aluno][i]} não é uma opção de alternativa válida')
        if gabarito[i] == notas[aluno][i]:
          nota.append(notas[aluno][i])
      nota_final = len(nota)
      print(f'o aluno {aluno + 1} tirou {nota_final}/5')
    
  except Exception as e:
    print(e)

fazendo o teste sem exceções, o código roda perfeitamente.só que quando faço o teste com exceções, o código retorna a nota do aluno 1 e só depois o print do raise: Insira aqui a descrição dessa imagem para ajudar na acessibilidade

o que devo corrigir no código para que a saída seja apenas 'A alternativa {notas[aluno][i]} não é uma opção de alternativa válida'?

2 respostas
solução!

Boa tarde, Ana! Tudo bem com você?

Você pode usar o bloco else junto com o bloco try-except para alcançar o comportamento desejado. O bloco try-except-else funciona da seguinte forma:

  • try: O código dentro do bloco try é executado. Ele é usado para agrupar o código que pode potencialmente gerar uma exceção.

  • except: Se uma exceção ocorrer durante a execução do bloco try, o Python verifica se o tipo de exceção corresponde a algum dos tipos especificados na cláusula except. Se corresponder, o código dentro do bloco except é executado para lidar com a exceção.

  • else: O bloco else é opcional e é executado se nenhuma exceção ocorrer durante a execução do bloco try. Ele é útil para colocar código que deve ser executado apenas se nenhum erro ocorrer.

Tendo isso em mente, nosso novo código ficará assim:

def correcao(gabarito, notas):
  try:
    for aluno in range(0, 3):
      for i in range(len(gabarito)):
        if notas[aluno][i] not in ['A','B','C','D']:
          raise ValueError(f'A alternativa {notas[aluno][i]} não é uma opção de alternativa válida')
    
  except Exception as e:
    print(e)
  else:
    for aluno in range(0, 3):
      nota = []
      for i in range(len(gabarito)):
        if gabarito[i] == notas[aluno][i]:
          nota.append(notas[aluno][i])
      nota_final = len(nota)
      print(f'o aluno {aluno + 1} tirou {nota_final}/5')

Deixo abaixo algumas imagens com resultados após a execução:

Imagem que mostra a execução da função do código acima Imagem que mostra a execução da função do código acima Imagem que mostra a execução da função do código acima

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 ✓. Bons Estudos!

maravilha! eu não tinha conseguido compreender direito o uso do else em certas situações mas agora consegui!!

o negócio é colocar o código que "pode dar errado" no try, e o código na situação ideal, sem erros, no else, né? muito obrigadaaa! :)