1
resposta

Exercicios resolvidos Projeto 5

Aplicando a projetos
5. Como desafio, você recebeu a tarefa de desenvolver um código que contabiliza as pontuações de estudantes de uma instituição de ensino de acordo com suas respostas num teste. Este código deve ser testado para um exemplo de 3 estudantes com uma lista de listas em que cada lista possui as respostas de 5 questões objetivas de cada estudante. Cada questão vale um ponto e as alternativas possíveis são A, B, C ou D.
Caso alguma alternativa em um dos testes não esteja entre as alternativas possíveis, você deve lançar um ValueError com a mensagem "A alternativa [alternativa] não é uma opção de alternativa válida". O cálculo das 3 notas só será realizado mediante as entradas com as alternativas A, B, C ou D em todos os testes. Se não for lançada a exceção, será exibida uma lista com as notas em cada teste.
Os dados para o teste do código são:

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

Abaixo temos 2 listas de listas que você pode usar como teste

Notas sem exceção:
testes_sem_ex = [['D', 'A', 'B', 'C', 'A'], ['C', 'A', 'A', 'C', 'A'], ['D', 'B', 'A', 'C', 'A']]

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

Dica: Para verificar se uma entrada da lista não está entre as alternativas possíveis, use a estrutura lista[i] not in ['A','B','C','D']. Por exemplo, 1 not in [2,3,4]... Saída: True.

# Função para correção das notas
gabarito = ['D', 'A', 'B', 'C', 'A']
testes_com_ex = [['D', 'A', 'B', 'C', 'A'], ['C', 'A', 'A', 'E', 'A'], ['D', 'B', 'A', 'C', 'A']]
def corretor(testes: list):
  notas = []
  try:
    for teste in testes:
      nota = 0
      for i in range(len(teste)):
        if teste[i] not in ['A','B','C','D']:
          raise ValueError(f"A alternativa {teste[i]} não é uma opção de alternativa válida")
        elif teste[i] == gabarito[i]:
          nota += 1
      notas.append(nota)
  except Exception as e:
    print(type(e),f"Error: {e}")
  else:
    return notas

Matricule-se agora e aproveite até 50% OFF

O maior desconto do ano para você evoluir com a maior escola de tecnologia

QUERO APROVEITAR
1 resposta

Olá, Valentina! Como vai?

Parabéns pela resolução da atividade!

Observei que você explorou o uso de listas para organizar os testes, utilizou muito bem o tratamento de exceções para validar alternativas e ainda compreendeu a importância da lógica condicional para garantir a correção precisa das respostas.

Uma dica interessante para o futuro é aplicar o try/except dentro do loop de testes, permitindo que erros em uma prova não interrompam a correção das demais. Assim:

def corretor(testes: list):
  notas = []
  for teste in testes:
    nota = 0
    try:
      for i in range(len(teste)):
        if teste[i] not in ['A','B','C','D']:
          raise ValueError(f"A alternativa {teste[i]} não é válida")
        elif teste[i] == gabarito[i]:
          nota += 1
      notas.append(nota)
    except Exception as e:
      print(type(e), f"Erro: {e}")
      notas.append(None)
  return notas

Isso faz com que o programa continue funcionando mesmo quando encontra respostas inválidas em uma das listas.

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

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