Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Sugestão] Python_04_Lidando_com_Exceções Atividade 01/02/03

## 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.
print('CÁLCULO DE DIVISÕES')
print('====================')

try:
    entrada1 = input('Informe o primeiro número: ')
    entrada2 = input('Informe o segundo número: ')

    # Tenta converter as entradas para float
    num1 = float(entrada1)
    num2 = float(entrada2)

    # Verifica se o numerador é zero
    if num1 == 0:
        raise ValueError('Erro: O primeiro número (numerador) não pode ser zero.')

    # Realiza a divisão
    resultado = num1 / num2

except ValueError as ve:
    if 'could not convert' in str(ve):
        print('Erro: Você deve digitar apenas números (sem letras ou símbolos).')
    else:
        print(ve)
except ZeroDivisionError:
    print('Erro: O segundo número (divisor) não pode ser zero.')
else:
    # Exibe o resultado da divisão
    print(f'O resultado da divisão é: {resultado:.2f}')
finally:
    print('Fim do programa.')
## 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.
# Dicionário com nomes e idades
idades = {'Júlia': 16, 'Carol': 23, 'Alberto': 19, 'Roberta': 17}

try:
    # Solicita ao usuário o nome que deseja pesquisar e capitaliza a primeira letra
    nome = input('Qual nome você quer pesquisar? ').capitalize()
    
    # Verifica se o nome está no dicionário
    if nome in idades:
        # Se estiver, exibe o nome e a idade
        print(f'{nome}, {idades[nome]} anos.')
    else:
        # Se não estiver, levanta uma exceção do tipo KeyError
        raise KeyError('Nome não encontrado.')
        
except KeyError as e:
    # Captura o erro levantado e exibe a mensagem de erro
    print(e)

finally:
    print('Fim do programa.')
## 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'.
# Criando lista de valores numéricos
quant = int(input('Quantos valores você quer adicionar? '))
valores = []
for i in range(quant):
    valor = input(f'Digite o valor {i+1}: ')
    valores.append(valor)

# Função que verifica os valores inseridos e retorna os valores válidos e se houve correção
def verifica_valores(valores):
    valores_validos = []
    houve_correcao = False
    for i, valor in enumerate(valores):
        while True:
            try:
                valor_float = float(valor)
                if valor_float < 0:
                    raise ValueError('O valor não pode ser negativo.')
                valores_validos.append(valor_float)
                break  # Valor válido, sai do loop
            except ValueError as e:
                houve_correcao = True  # Marca que houve uma correção
                if 'could not convert string to float' in str(e):
                    print(f'Erro: não foi possível converter o valor "{valor}" para número decimal.')
                else:
                    print(f'Erro ao processar o valor "{valor}" na posição {i + 1}: {e}')
                valor = input(f'Digite novamente um valor válido para a posição {i + 1}: ')
    return valores_validos, houve_correcao

# Execução principal com finally externo
valores_validos = []

try:
    valores_validos, houve_correcao = verifica_valores(valores)
    print('Valores válidos:', valores_validos)
finally:
    print('Fim da execução da função.')
1 resposta
solução!

Ei, Marinaldo!

Sua implementação ficou bem completa e mostra domínio sobre o uso de try, except e finally, além de trazer validações específicas como a verificação de números negativos. O tratamento da exceção ValueError e a repetição do input é um bom exemplo de código robusto.

Fico feliz que sempre está ativo nas atividades e aqui no fórum, continue assim!

Qualquer dúvida, não hesite em compartilhar.

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