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)