Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
1
resposta

Aula 4 - Desafio: hora da prática

# 1. Faça um programa que solicite à pessoa usuária digitar dois números float e calcular a divisão entre esses números...
try:
    num1 = float(input("Digite o primeiro número (dividendo): "))
    num2 = float(input("Digite o segundo número (divisor): "))
    resultado = num1 / num2
except ZeroDivisionError as e:
    print(f"Erro de Divisão por Zero: Não é possível dividir um número por zero. [{e}]")
except ValueError as e:
    print(f"Erro de Valor: Você deve digitar apenas números válidos. [{e}]")
except Exception as e:
    print(f"Ocorreu um erro inesperado: {e}")
else:
    print(f"O resultado da divisão é: {resultado}")

# 2. Faça um programa que solicite uma chave a ser pesquisada no dicionário com tratamento de KeyError...
idades = {'Júlia': 16, 'Carol': 23, 'Alberto': 19, 'Roberta': 17}

nome_busca = input("Digite o nome para pesquisar a idade: ")

try:
    idade = idades[nome_busca]
except KeyError:
    print("Nome não encontrado")
else:
    print(f"A idade de {nome_busca} é {idade} anos.")

# 3. Crie uma função que recebe uma lista como parâmetro e converta todos os valores da lista para float...
def converter_para_float(lista):
    lista_float = []
    try:
        for elemento in lista:
            lista_float.append(float(elemento))
    except ValueError as e:
        print(f"Erro de conversão detectado: {e}")
        return None
    except TypeError as e:
        print(f"Erro de tipo de dado incompatível: {e}")
        return None
    else:
        return lista_float
    finally:
        print("Fim da execução da função")

# 4. Crie uma função que recebe duas listas como parâmetros e agrupe os elementos um a um formando tuplas de 3 elementos...
def agrupar_listas_com_soma(lista1, lista2):
    lista_resultado = []
    try:
        if len(lista1) != len(lista2):
            raise IndexError("A quantidade de elementos em cada lista é diferente.")
        
        for i in range(len(lista1)):
            soma = lista1[i] + lista2[i]
            lista_resultado.append((lista1[i], lista2[i], soma))
            
    except IndexError as e:
        print(f"Erro de Índice: {e}")
        return lista_resultado
    except TypeError as e:
        print(f"Erro de Tipo: Operação de soma inválida devido a valores incoerentes. [{e}]")
        return lista_resultado
    else:
        return lista_resultado

# 5. Desenvolver um código que contabiliza as pontuações de estudantes validando as alternativas com ValueError...
def calcular_notas_testes(gabarito, testes):
    alternativas_validas = ['A', 'B', 'C', 'D']
    notas_finais = []
    
    try:
        for estudante in testes:
            nota_estudante = 0
            for i in range(len(estudante)):
                alternativa = estudante[i]
                if alternativa not in alternatives_validas:
                    raise ValueError(f"A alternativa {alternativa} não é uma opção de alternativa válida")
                
                if alternativa == gabarito[i]:
                    nota_estudante += 1
            notas_finais.append(nota_estudante)
            
    except ValueError as e:
        print(f"Erro de Validação: {e}")
    else:
        print(f"Lista de notas dos estudantes: {notas_finais}")

# 6. Criar uma função que avalia cada palavra desse texto e verificar se o tratamento para retirar os símbolos de pontuação foi realizado...
def verificar_pontuacao(lista_palavras):
    pontuacoes = [',', '.', '!', '?']
    try:
        for palavra in lista_palavras:
            for p in pontuacoes:
                if p in palavra:
                    raise ValueError(f'O texto apresenta pontuações na palavra "{palavra}".')
    except ValueError as e:
        print(f"Exceção disparada: {e}")
    else:
        print("Sucesso: Todas as palavras foram tratadas corretamente!")

# 7. Criar uma função divide_colunas que recebe os dados das colunas de pressão e temperatura...
def divide_colunas(p_lista, t_lista):
    coluna_divisao = []
    try:
        if len(p_lista) != len(t_lista):
            raise ValueError("As listas de pressões e temperaturas possuem tamanhos diferentes.")
            
        for p, t in zip(p_lista, t_lista):
            if t == 0:
                raise ZeroDivisionError("Divisão por zero detectada nos dados de temperatura.")
            coluna_divisao.append(p / t)
            
    except ValueError as e:
        print(f"Erro de Valor: {e}")
        return None
    except ZeroDivisionError as e:
        print(f"Erro de Divisão: {e}")
        return None
    else:
        return coluna_divisao
1 resposta
solução!

Oi, Julia! Como vai?

Agradeço por compartilhar sueus aprendizados com a comunidade Alura. *

Interessante a sua resolução do desafio, você explorou diferentes tipos de exceções e organizou bem o uso de try, except, else e finally em cada situação. Também foi interessante notar a preocupação em fornecer mensagens claras para quem utilizar o programa, tornando o código mais compreensível e amigável durante a execução. Esse cuidado contribui para criar aplicações mais robustas e facilita a identificação de problemas quando eles acontecem.

Continue praticando dessa forma, pois você está desenvolvendo uma base sólida para lidar com erros em Python.

Dica: além de tratar exceções, experimente criar alguns testes com entradas inválidas e casos extremos, como listas vazias, valores nulos ou tipos inesperados, para verificar como suas funções se comportam. Também vale revisar a consistência dos nomes das variáveis, já que pequenas diferenças de escrita podem gerar erros durante a execução. Esse hábito ajuda bastante na depuração e na manutenção do código.

Conte com o apoio do Fórum na sua jornada. Abraços e bons estudos!

Fiquei curiosa: qual dos exercícios deste desafio você considerou mais interessante ou desafiador de implementar e por quê?

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