1
resposta

[Projeto] AQUECIMENTO - Tratando Exceções em Python

#AQUECIMENTO
#1. Faça um programa que solicite à pessoa usuária digitar dois números float e calcular a divisão entre esses números. O código deve conter um tratamento de erro, indicando o tipo de erro que foi gerado caso a divisão não seja possível de realizar.

#Teste o programa com o segundo valor numérico do input igual a 0. Também teste utilizando caracteres textuais no input para checar os tipos de erro que ocorrem.

try:
    numero_1 = float(input('Digite um número: '))
    numero_2 = float(input('Digite outro número: '))
except ValueError:
    print('O tipo de caracter digitado é inválido!')
    print('Digite novamente')
    numero_1 = float(input('Digite um número: '))
    numero_2 = float(input('Digite outro número: '))
finally:
    divisao = numero_1 / numero_2
    print(f'Resultado da divisão: {round(divisao, 2)}')

#2. Faça um programa que solicite à pessoa usuária digitar um texto que será uma chave a ser pesquisada no seguinte dicionário: idades = {'Júlia': 16, 'Carol': 23, 'Alberto': 19, 'Roberta': 17}, armazenando o resultado do valor em uma variável. O código deve conter um tratamento de erro KeyError, imprimindo a informação 'Nome não encontrado', caso ocorra o erro; e imprimir o valor caso não ocorra nenhum.
#Teste o programa com um nome presente em uma das chaves do dicionário e com um que não esteja no dicionário para verificar a mensagem de erro.

idades = {'Júlia': 16, 'Carol': 23, 'Alberto': 19, 'Roberta': 17}
chave = input('Digite uma chave: ')
chave = chave.capitalize()

try:
    idades[chave]
except KeyError:
    print('Nome não encontrado')
else:
    print(idades[chave])

#3. Crie uma função que recebe uma lista como parâmetro e converta todos os valores da lista para float. A função deve conter um tratamento de erro indicando o tipo de erro gerado e retornar a lista caso não tenha ocorrido nenhum erro. Por fim, deve ter a cláusula finally para imprimir o texto: 'Fim da execução da função'.
numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

def converterParaFloat (lista:list):
    try:
        novaLista = [float(item) for item in lista]
    except Exception as e:
        print(f'Tipo do erro: {type(e)}, erro: {e}')
    else:
        return novaLista
    finally:
        print('Fim da execução da função')

print(converterParaFloat(numeros))

#4. Crie uma função que recebe duas listas como parâmetros e agrupe os elementos um a um das listas, formando uma lista de tuplas de 3 elementos, no qual o primeiro e segundo elemento da tupla são os valores na posição i das listas e o terceiro elemento é a soma dos valores na posição i das listas.
from logging import exception

#A função deve conter um tratamento de erro indicando o tipo de erro gerado e retornar como resultado a lista de tuplas. Caso as listas enviadas como parâmetro tenham tamanhos diferentes, a função deve retornar um IndexError com a frase: 'A quantidade de elementos em cada lista é diferente.' Dados para testar a função:

lista1 = [5,5,5,6,7,9]
lista2 = [-4,6,8,7,9]

def agrupar(lista1:list, lista2:list):
    try:
        if len(lista1) != len(lista2):
            raise IndexError('A quantidade de elementos em cada lista é diferente.')

        soma = [lista1[i] + lista2[i]  for i in range(len(lista1))]
        agrupamento = zip(lista1,lista2,soma)

    except Exception as e:
        print(f'Tipo de erro: {type(e)}, erro: {e}')
        return []
    else:
        return list(agrupamento)

print(agrupar(lista1,lista2))



1 resposta

Olá, Isabella! Como vai?

Parabéns pela resolução da atividade!

Observei que você explorou o try-except para tratamento de erros com Python, utilizou muito bem o KeyError para validar chaves em dicionários e ainda compreendeu a importância da cláusula finally para garantir mensagens de encerramento mesmo em situações de exceção.

Uma dica interessante para o futuro é aplicar o zip() diretamente em list comprehension para simplificar a criação de tuplas. Assim:

lista1 = [5, 5, 5, 6, 7, 9]
lista2 = [-4, 6, 8, 7, 9, 10]

agrupamento = [(a, b, a+b) for a, b in zip(lista1, lista2)]
print(agrupamento)

Isso faz o agrupamento de forma mais enxuta e legível.

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!