1
resposta

[Sugestão] 4. Lidando com Exceções : 1º Parte

E.4.1

def numeros_decimais():
    try:
        rn = float(input("Digite um número real para numerador: ").replace(",","."))
        rd = float(input("Digite um número real para denominador: ").replace(",","."))
        if rd == 0:
            raise ZeroDivisionError("Não é possível realizar a divisão com denominador igual a zero.")
        divisao = rn/rd
    except ValueError:
        print("Erro: Você deve digitar números reais.")
        return False
    except ZeroDivisionError as e:
        print(e)
        return False
    else:
        print(f"O resultado da divisão de {rn} por {rd} é {divisao:.2f}")
        return True


while True:
    if numeros_decimais():
        break
    else:
        print("Tente novamente!!!")

E.4.2

idades = {'Júlia': 16, 'Carol': 23, 'Alberto': 19, 'Roberta': 17}

def cadastro():
    try:
        nome = input("Digite o nome: ").strip().capitalize()
        idade = idades[nome]
        print(f"A idade do(a) {nome} é {idade} anos.")
        return True
    except KeyError:
        print("Nome não encontrado no cadastro!")
        return False
    except ValueError:
        print("Erro: Você deve digitar um nome!")
        return False


while True:
    if cadastro():
        break
    else:
        print("Tente novamente!!!")

E4.3

def mudar_float(lista):
    try:
        nova_lista = [float(elemento) for elemento in lista]
        return nova_lista
    except ValueError as e:
        print(f"Erro: {e}. A lista deve conter apenas valores numéricos.")
        return None
    finally:
        print("Fim da execução da função!")

lista_com_erros = [4, 6, "texto", True, 10, "123abc"]
resultado = mudar_float(lista_com_erros)
if resultado is not None:
    print("Lista convertida:", resultado)
    print("Tipo da lista convertida:", type(resultado[0]))
else:
    print("A lista não pôde ser convertida.")
    print(f"{'-'*40}")

lista = [4, 6, 7, 9, 10]
resultado = mudar_float(lista)
if resultado is not None:
    print("Lista convertida:", resultado)
    print("Tipo da lista convertida:", type(resultado[0]))
else:
    print("A lista não pôde ser convertida.")
    print(f"{'-'*40}")

E4.4

def agrupar_listas(lista1, lista2):
    try:
        if len(lista1) != len(lista2):
            raise IndexError("A quantidade de elementos em cada lista é diferente.")
        agrupada = []
        for i in range(len(lista1)):
            if not isinstance(lista1[i], (int, float)) or not isinstance(lista2[i], (int, float)):
                raise TypeError(f"Os valores devem ser numéricos, mas recebeu {type(lista1[i])} e {type(lista2[i])}.")
            agrupada.append((lista1[i], lista2[i], lista1[i] + lista2[i]))
        return agrupada
    except (IndexError, TypeError) as e:
        return f"Erro: {e}"


# Testando a função
lista1 = [4, 6, 7, 9, 10]
lista2 = [-4, 6, 8, 7, 9]
print(agrupar_listas(lista1, lista2))
print(f"{'-'*40}")

lista3 = [4, 6, 7, 9, 10, 4]
lista4 = [-4, 6, 8, 7, 9]
print(agrupar_listas(lista3, lista4))
print(f"{'-'*40}")

lista5 = [4, 6, 7, 9, 'A']
lista6 = [-4, 'E', 8, 7, 9]
print(agrupar_listas(lista5, lista6))
print(f"{'-'*40}")

lista7 = [4, 6, 7, 9, 8.3]
lista8 = [-4, 3.14, 8, 7, 9]
print(agrupar_listas(lista7, lista8))
print(f"{'-'*40}")

E4.5

def conferir(listas):
    gabarito = ['D', 'A', 'B', 'C', 'A']
    alternativas_validas = ['A', 'B', 'C', 'D']
    for idx, lista in enumerate(listas, start=1):
        try:
            pontos = 0
            for resposta in lista:
                if resposta not in alternativas_validas:
                    raise ValueError(f"A alternativa '{resposta}' não é uma opção de alternativa válida.")

            print(f"\n Corrigindo respostas do Aluno {idx}:")
            for i in range(len(lista)):
                if lista[i] == gabarito[i]:
                    pontos += 1
                    print(f"Resposta: {lista[i]} | Gabarito: {gabarito[i]} → Acertou! (+1 ponto)")
                else:
                    print(f"Resposta: {lista[i]} | Gabarito: {gabarito[i]} → Errou! (+0 pontos)")
            print(f"\n Aluno {idx}: Total de pontos: {pontos}/5 ({100 * pontos / 5}%)")
            print("=" * 40)
        except ValueError as e:
            print(f"Erro encontrado no teste do Aluno {idx}: {e}")
            print("=" * 40)



testes_1 = [['D', 'A', 'B', 'C', 'A'], ['C', 'A', 'A', 'E', 'A'], ['D', 'B', 'A', 'C', 'A']]
print("Testes com exceção:")
conferir(testes_1)

testes_2 = [['D', 'A', 'B', 'C', 'A'], ['C', 'A', 'A', 'C', 'A'], ['D', 'B', 'A', 'C', 'A']]
print("\nTestes sem exceção:")
conferir(testes_2)
1 resposta

Olá, Wiliam, tudo bem?

Analisei o seu código e ele está correto! Apenas tenho um ponto de melhoria para destacar: no exercício 4.2, o except ValueError não é necessário, pois input() sempre retorna uma string.

No geral, seu código atende perfeitamente aos requisitos propostos. Parabéns! Continue se dedicando e sinta-se à vontade para retornar ao fórum sempre que tiver dúvidas ou quiser compartilhar mais insights.

Abraços e bons estudos!