Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

0
respostas

Desafio: hora da prática

Aquecimento

Q1

def divisao(num1, num2):
return num1 / num2

try:
num1 = float(input("Digite o primeiro número: "))
num2 = float(input("Digite o segundo número: "))

resultado = divisao(num1, num2)

except ValueError as e:
print(f"Erro de valor: {e}")

except ZeroDivisionError as e:
print(f"Erro de divisão por zero: {e}")

else:
print(f"O resultado da divisão é: {resultado}")

finally:
print("Fim do programa")

Q2

idades = {'Júlia': 16, 'Carol': 23, 'Alberto': 19, 'Roberta': 17}
try:
nome = input("Digite o nome: ")
if idades[nome]:
print(f"Nome encontrado")
except KeyError as e:
print(f"Nome não encontrado")
finally:
print("Fim do programa")

Q3

def conversorFloat(list):
try:
for i in range(len(list)):
list[i] = float(list[i])
return list
except ValueError as e:
print(f"Erro de valor: Algum item da lista não é um número")

finally:
print("Fim da execução da função")

lista = [1, 'b', 3, 4, 5]
print(conversorFloat(lista))

Q4.

Valores sem erro:

lista1 = [4,6,7,9,10]

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

Listas com tamanhos diferentes:

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

Listas com valores incoerentes:

lista1 = [4,6,7,9,'A']

lista2 = [-4,'E',8,7,9]

def soma_listas(lista1, lista2):
lista_tuplas = []

try:
    if len(lista1) != len(lista2):
        raise IndexError(
            "A quantidade de elementos em cada lista é diferente."
        )

    for i in range(len(lista1)):
        lista_tuplas.append(
            (lista1[i], lista2[i], lista1[i] + lista2[i])
        )

    return lista_tuplas

except IndexError as e:
    print(e)

except TypeError as e:
    print(f"Erro de tipo: {e}")

finally:
    print("Fim da execução da função")

print(soma_listas(lista1, lista2))

Aplicando a projetos

Q5.gabarito = ['D', 'A', 'B', 'C', 'A']

testes_sem_ex = [
['D', 'A', 'B', 'C', 'A'],
['C', 'A', 'A', 'C', 'A'],
['D', 'B', 'A', 'C', 'A']
]

def corrige_provas(testes, gabarito):
alternativas_validas = ['A', 'B', 'C', 'D']
notas = []

for teste in testes:
    nota = 0

    for resposta, correta in zip(teste, gabarito):

        if resposta not in alternativas_validas:
            raise ValueError(
                f"A alternativa {resposta} não é uma opção de alternativa válida"
            )

        if resposta == correta:
            nota += 1

    notas.append(nota)

return notas

try:
print(corrige_provas(testes_sem_ex, gabarito))

except ValueError as e:
print(e)

Q6

pontuacao_simbolos = [',', '.', '!', '?']

Lista tratada:

lista_tratada = [
'Python', 'é', 'uma', 'linguagem', 'de', 'programação',
'poderosa', 'versátil', 'e', 'fácil', 'de', 'aprender',
'utilizada', 'em', 'diversos', 'campos', 'desde',
'análise', 'de', 'dados', 'até', 'inteligência', 'artificial'
]

Lista não tratada:

lista_nao_tratada = [
'Python', 'é', 'uma', 'linguagem', 'de', 'programação',
'poderosa,', 'versátil', 'e', 'fácil,', 'de', 'aprender',
'utilizada', 'em', 'diversos', 'campos,', 'desde',
'análise', 'de', 'dados', 'até', 'inteligência', 'artificial!'
]

def tratar_lista(lista, pontuacoes):
try:
for palavra in lista:
if (',' in palavra or
'.' in palavra or
'!' in palavra or
'?' in palavra):
raise ValueError(
f'O texto apresenta pontuações na palavra "{palavra}".'
)

    print("O texto não apresenta pontuações.")

except ValueError as e:
    print(e)

finally:
    print("Fim da execução da função")

tratar_lista(lista_nao_tratada, pontuacao_simbolos)

#Q7
pressoes = [100, 120, 140, 160, 180]
temperaturas = [20, 25, 30, 35, 40]

def divide_colunas(pressao, temperatura):
try:
if len(pressao) != len(temperatura):
raise ValueError(
"A quantidade de elementos em cada lista é diferente."
)

    razao_pressao_temperatura = []

    for p, t in zip(pressao, temperatura):
        if t == 0:
            raise ZeroDivisionError(
                "Não é possível dividir por zero."
            )
        razao = p / t
        razao_pressao_temperatura.append(round(razao,2))

    return razao_pressao_temperatura

except ValueError as e:
    print(e)

except ZeroDivisionError as e:
    print(e)

finally:
    print("Fim da execução da função")

resultado = divide_colunas(pressoes, temperaturas)
print(resultado)