2
respostas

[Projeto] Desafio: hora da prática_09 Parte 2

#5

def contabilizarNotas(gabarito, testes):
  notas = []
  try:
    for teste in testes: #obtém a sublistas da lista 1 a 1
      nota = 0
      for i in range(len(teste)):
        if teste[i] not in gabarito: #verificar se cada elemento da sublista esta no gabarito
          raise ValueError(f'A alternativa {teste[i]} não é uma opção de alternativa válida')
        if teste[i] == gabarito[i]:
          #Cada alternativa vale 1 ponto
          nota += 1 
      notas.append(nota)
  except ValueError as e:
    print(f"{e}")        
  except Exception as e:
    print(f"Um erro ocorreu {e} - {type(e)}")          
  else:
    return notas
    

gabarito = ['D', 'A', 'B', 'C', 'A']
#testes_sem_ex = [['D', 'A', 'B', 'C', 'A'], ['C', 'A', 'A', 'C', 'A'], ['D', 'B', 'A', 'C', 'A']]
testes_com_ex = [['D', 'A', 'B', 'C', 'A'], ['C', 'A', 'A', 'E', 'A'], ['D', 'B', 'A', 'C', 'A']]

listaNotas = contabilizarNotas(gabarito, testes_com_ex)
print(listaNotas)
#6

import re

def ContemPontuacao(lista) -> bool:
  '''
  Verificar se lista contém palavras com pontuação
  Retorna True caso haja pontuação e False caso não haja
  Em caso ter pontuação lança uma exceção do tipo ValueError
  '''
  lista_tratada = []

  try:
    for palavra in lista:
      if re.search(r'[,.!?]', palavra):
        raise ValueError(f'O texto apresenta pontuações na palavra "[" {palavra} "]".')
  except ValueError as e:
    print(f"{e}")        
    return True
  except Exception as e:
    print(f"Um erro ocorreu {e} - {type(e)}")
  else:
    print('Frase Limpa!')            
    return False

        



lista_tratada = ['Python', 'é', 'uma', 'linguagem', 'de', 'programação', 'poderosa', 'versátil',
                  'e', 'fácil', 'de', 'aprender', 'utilizada', 'em', 'diversos', 'campos', 'desde',
                  'análise', 'de', 'dados', 'até', 'inteligência', 'artificial']


lista_nao_tratada = ['Python', 'é', 'uma', 'linguagem', 'de', 'programação', 'poderosa,', 'versátil',
                  'e', 'fácil,', 'de', 'aprender', 'utilizada', 'em', 'diversos', 'campos,', 'desde',
                  'análise', 'de', 'dados', 'até', 'inteligência', 'artificial!']                  


#Teste caso lista_tratada
fraseTratada = ContemPontuacao(lista_tratada)
print(fraseTratada)

print('\n')

#teste caso lista_nao_tratada
fraseTratada = ContemPontuacao(lista_nao_tratada)
print(fraseTratada)
#7

def divide_colunas(pressoes, temperaturas)->list:
  resultados = []

  try:
    if len(pressoes) != len(temperaturas):
      raise ValueError('As listas não tem o mesmo tamanho')
    else:  
      resultados = [reg for reg in map(lambda p_t: p_t[0] / p_t[1], zip(pressoes, temperaturas))]
      return resultados
  except ZeroDivisionError:
    print(f'Não é possível dividir por zero')
  except ValueError:
    print(f'As listas não tem o mesmo tamanho')
  except Exception as e:
    print(f'Um erro ocorreu {e} - {type(e)}')
  finally:
    resultados  

#Dados sem exceção:
pressoes = [100, 120, 140, 160, 180]
temperaturas = [20, 25, 30, 35, 40]

razao = divide_colunas(pressoes, temperaturas)
print(razao)

print('\n')  

#1) Exceção de ZeroDivisionError
pressoes = [60, 120, 140, 160, 180]
temperaturas = [0, 25, 30, 35, 40]
razao = divide_colunas(pressoes, temperaturas)
print(razao)

print('\n')  

#2) Exceção de ValueError
pressoes = [100, 120, 140, 160]
temperaturas = [20, 25, 30, 35, 40]
razao = divide_colunas(pressoes, temperaturas)
print(razao)
2 respostas

Olá, Marcelo! Como vai?

Parabéns pela resolução da atividade!

Observei que você explorou o tratamento de exceções para validar entradas com Python, utilizou muito bem o bloco try/except para diferentes cenários e ainda compreendeu a importância da função raise para sinalizar erros de forma clara.

Continue postando as suas soluções, com certeza isso ajudará outros estudantes e tem grande relevância para o fórum.

Uma dica interessante para o futuro é aproveitar o assert para validar condições de forma enxuta. Assim:

def divide_colunas(pressoes, temperaturas):
    assert len(pressoes) == len(temperaturas), "As listas não têm o mesmo tamanho"
    return [p/t for p, t in zip(pressoes, temperaturas)]

Isso faz a verificação automática e lança uma exceção caso a condição não seja atendida, simplificando o código.

Conteúdos relacionados

Alguns materiais podem estar em inglês, mas é possível compreendê-los usando o recurso de tradução de páginas do próprio navegador.

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!

Bom dia Daniel,

mas no caso de assert seria mais pra debug certo, não para fluxo do programa voltado para a pessoal usuária? o raise levanta o erro e pode capturr, assert vrifica se condição é verdadeira para depuração como em testes unitários?