1
resposta

Resolução do Desafio, aula 4

Aqui estão as minhas resoluções, algumas um pouco diferente do instrutor:

1-

try:
  num1 = float(input('Digite o primeiro número: '))
  num2 = float(input('Digite o segundo número: '))
  resultado = num1/num2
except Exception as e:
  print(type(e), f'Erro: {e}')
else:
  print(resultado)

2-

try:
  nome = input('Digite o nome para saber a idade: ')
  resultado = idades[nome]
except KeyError:
  print('Nome não encontrado')
else:
  print(resultado)

3-

def converter(lista):
  lista_numeros = []
  try:
    for numero in lista:
      lista_numeros.append(float(numero))
  except Exception as e:
    print(type(e), f'Erro: {e}')
  else:
    return lista_numeros
  finally:
    print('Fim da execução da função')

4-

def agrupar_listas(lista1, lista2):
  try:
    if len(lista1) == len(lista2):
      lista_tupla = [(numero[0], numero[1], numero[0] + numero[1]) for numero in zip(lista1, lista2)]
    else:
      raise IndexError('A quantidade de elementos em cada lista é diferente.')
  except Exception as e:
    print(type(e), f'Erro: {e}')
  else:
    return lista_tupla

5-

def calcular_notas(lista_respostas_alunos):
    # Define o gabarito com as respostas corretas da prova
    gabarito = ['D', 'A', 'B', 'C', 'A']

    # Lista onde serão armazenadas as notas de cada aluno
    notas = []

    try:
        # Percorre cada lista de respostas (um aluno por vez)
        for respostas in lista_respostas_alunos:

            # Valida se todas as alternativas do aluno são válidas (A, B, C ou D)
            for i in range(len(respostas)):
                if respostas[i] not in ['A', 'B', 'C', 'D']:
                    # Se encontrar uma alternativa inválida, lança um erro
                    raise ValueError(f'A alternativa {respostas[i]} não é uma opção de alternativa válida.')

            # Inicializa a nota do aluno
            nota = 0

            # Compara cada resposta do aluno com o gabarito
            for resposta_aluno, resposta_correta in zip(respostas, gabarito):
                if resposta_aluno == resposta_correta:
                    # Se a resposta estiver correta, soma 1 ponto
                    nota += 1

            # Adiciona a nota final do aluno à lista de notas
            notas.append(nota)

    except ValueError as e:
        # Se houve uma alternativa inválida, imprime o tipo do erro e a mensagem
        print(type(e), f'Erro: {e}')

    else:
        # Se não houver erro, retorna a lista de notas dos alunos
        return notas

6- Aqui nessa questão, achei interessante mostra não apenas uma palavra, mas uma lista de todas as palavras que continham as pontuações

def avaliar_palavras(lista_palavras):
  palavras_nao_tratadas = []
    
  # Inicia o bloco try para capturar possíveis exceções
  try:
    # Percorre cada palavra da lista recebida
    for palavra in lista_palavras:
      # Verifica se a palavra contém algum dos símbolos de pontuação indesejados
      if ',' in palavra or '.' in palavra or '!' in palavra or '?' in palavra:
        palavras_nao_tratadas.append(palavra)

    # Se a lista de palavras com pontuação não estiver vazia, lança o erro
    if palavras_nao_tratadas:
      # Se encontrar pontuação, lança um erro com a mensagem especificando a palavra
      raise ValueError(f'O texto apresenta pontuações nas palavras "{palavras_nao_tratadas}".')

    return 'Texto já tratado!'
    
    # Captura o ValueError se alguma palavra com pontuação for encontrada
  except ValueError as e:
    # Exibe o tipo do erro e a mensagem personalizada
    print(type(e), f'Erro: {e}')

7-

def divide_colunas(pressoes, temperaturas):
  # Inicia o bloco try para capturar possíveis exceções
  try:
    # Verifica se as listas têm tamanhos diferentes
    if len(pressoes) != len(temperaturas):
      # Lança um erro se os tamanhos forem diferentes
      raise ValueError('As listas tem tamanhos diferentes!')

    # Verifica se existe zero na lista de temperaturas
    elif 0 in temperaturas:
      # Lança um erro se houver divisão por zero
      raise ZeroDivisionError('Não é possível dividir por zero!')

    else:
      # Calcula a razão (pressão / temperatura) para cada par de valores
      # Arredonda o resultado para 2 casas decimais
      razao = [round(pressao / temperatura, 2) for pressao, temperatura in zip(pressoes, temperaturas)]
      
      # Exibe a lista com os resultados das divisões
      print(razao)

  # Captura qualquer exceção que ocorra no bloco try
  except Exception as e:
    # Imprime o tipo de erro e a mensagem personalizada
    print(type(e), f'Erro: {e}')
1 resposta

Oi, Thaynara! Tudo bom?

Excelente! Siga praticando com os desafios e sempre compartilhe conosco.

Você soube ekaborar o tratamento de exceções para validar listas de forma eficiente, aproveitou o raise com mensagens específicas para tornar os erros mais claros e entendeu como o try/except é essencial para capturar falhas em tempo de execução.

Como dica adicional, experimente utilizar traceback quando quiser imprimir o rastreamento completo do erro, isso pode ajudar bastante na depuração de problemas mais complexos. Assim:

import traceback

try:
    # código com erro
    resultado = 1/0
    print(resultado)
except Exception:
    traceback.print_exc()

Resultado:

Traceback (most recent call last):
  File "/tmp/ipython-input-2072654237.py", line 5, in <cell line: 0>
    resultado = 1/0
                ~^~
ZeroDivisionError: division by zero

Com isso, você poderá diagnosticar e entender erros com mais facilidade.

Ícone de sugestão Para saber mais:

Sugestão de conteúdo para você mergulhar ainda mais sobre o tema:

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!