Aqui estão as minhas resoluções, algumas um pouco diferente do instrutor:
1-
try:
num1 = float(input('Digite o primeiro número: '))
num2 = float(input('Digite o segundo número: '))
resultado = num1/num2
except Exception as e:
print(type(e), f'Erro: {e}')
else:
print(resultado)
2-
try:
nome = input('Digite o nome para saber a idade: ')
resultado = idades[nome]
except KeyError:
print('Nome não encontrado')
else:
print(resultado)
3-
def converter(lista):
lista_numeros = []
try:
for numero in lista:
lista_numeros.append(float(numero))
except Exception as e:
print(type(e), f'Erro: {e}')
else:
return lista_numeros
finally:
print('Fim da execução da função')
4-
def agrupar_listas(lista1, lista2):
try:
if len(lista1) == len(lista2):
lista_tupla = [(numero[0], numero[1], numero[0] + numero[1]) for numero in zip(lista1, lista2)]
else:
raise IndexError('A quantidade de elementos em cada lista é diferente.')
except Exception as e:
print(type(e), f'Erro: {e}')
else:
return lista_tupla
5-
def calcular_notas(lista_respostas_alunos):
# Define o gabarito com as respostas corretas da prova
gabarito = ['D', 'A', 'B', 'C', 'A']
# Lista onde serão armazenadas as notas de cada aluno
notas = []
try:
# Percorre cada lista de respostas (um aluno por vez)
for respostas in lista_respostas_alunos:
# Valida se todas as alternativas do aluno são válidas (A, B, C ou D)
for i in range(len(respostas)):
if respostas[i] not in ['A', 'B', 'C', 'D']:
# Se encontrar uma alternativa inválida, lança um erro
raise ValueError(f'A alternativa {respostas[i]} não é uma opção de alternativa válida.')
# Inicializa a nota do aluno
nota = 0
# Compara cada resposta do aluno com o gabarito
for resposta_aluno, resposta_correta in zip(respostas, gabarito):
if resposta_aluno == resposta_correta:
# Se a resposta estiver correta, soma 1 ponto
nota += 1
# Adiciona a nota final do aluno à lista de notas
notas.append(nota)
except ValueError as e:
# Se houve uma alternativa inválida, imprime o tipo do erro e a mensagem
print(type(e), f'Erro: {e}')
else:
# Se não houver erro, retorna a lista de notas dos alunos
return notas
6- Aqui nessa questão, achei interessante mostra não apenas uma palavra, mas uma lista de todas as palavras que continham as pontuações
def avaliar_palavras(lista_palavras):
palavras_nao_tratadas = []
# Inicia o bloco try para capturar possíveis exceções
try:
# Percorre cada palavra da lista recebida
for palavra in lista_palavras:
# Verifica se a palavra contém algum dos símbolos de pontuação indesejados
if ',' in palavra or '.' in palavra or '!' in palavra or '?' in palavra:
palavras_nao_tratadas.append(palavra)
# Se a lista de palavras com pontuação não estiver vazia, lança o erro
if palavras_nao_tratadas:
# Se encontrar pontuação, lança um erro com a mensagem especificando a palavra
raise ValueError(f'O texto apresenta pontuações nas palavras "{palavras_nao_tratadas}".')
return 'Texto já tratado!'
# Captura o ValueError se alguma palavra com pontuação for encontrada
except ValueError as e:
# Exibe o tipo do erro e a mensagem personalizada
print(type(e), f'Erro: {e}')
7-
def divide_colunas(pressoes, temperaturas):
# Inicia o bloco try para capturar possíveis exceções
try:
# Verifica se as listas têm tamanhos diferentes
if len(pressoes) != len(temperaturas):
# Lança um erro se os tamanhos forem diferentes
raise ValueError('As listas tem tamanhos diferentes!')
# Verifica se existe zero na lista de temperaturas
elif 0 in temperaturas:
# Lança um erro se houver divisão por zero
raise ZeroDivisionError('Não é possível dividir por zero!')
else:
# Calcula a razão (pressão / temperatura) para cada par de valores
# Arredonda o resultado para 2 casas decimais
razao = [round(pressao / temperatura, 2) for pressao, temperatura in zip(pressoes, temperaturas)]
# Exibe a lista com os resultados das divisões
print(razao)
# Captura qualquer exceção que ocorra no bloco try
except Exception as e:
# Imprime o tipo de erro e a mensagem personalizada
print(type(e), f'Erro: {e}')