Solucionado (ver solução)

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!

Solucionado
(ver solução)
4
respostas

[Projeto] Desafio: hora da prática_09 Parte 1

#1

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

  resultado = num1 / num2
except ZeroDivisionError:
  print(f"Não é possível Dividir por 0.")
except ValueError as e:
  print(f"Informe somente números inteiros ou ponto flutuante.")
except Exception as e:  
  print(f"Ocorreu um erro: {type(e)} - {e}")  
else:
  print(f'O resultado da divisão é: {resultado}')
  #2
  
  idades = {'Júlia': 16, 'Carol': 23, 'Alberto': 19, 'Roberta': 17}

  chave = input("Digite um nome: ").lower().capitalize()

  try:
    valor = idades[chave]
  except KeyError:
    print(f"Nome não encontrado")
  else:
    print(f'O resultado da busca é: {valor}')
#3

def converterListaToFloat(lista):
  try:
    for i in range(len(lista)):
      lista[i] = float(lista[i])
  except ValueError as e:
    print(f"Ocorreu um erro: {type(e)} - {e}")
  else:
    return lista  
  finally:
    print(f'Fim da execução da função')


#lista =[1,2,3,4,5,6]
#lista =[1,2,'a',4,5,6]
lista = [1.0, 2.0]

listaFloat = converterListaToFloat(lista)

print(listaFloat)
#4
def agruparListas(lista1, lista2):
  listaTuplas = []
  try:
    if len(lista1) == len(lista2):
      for i in range(len(lista1)):
        listaTuplas.append((lista1[i], lista2[i], lista1[i] + lista2[i]))
    else:
      raise IndexError('A quantidade de elementos em cada lista é diferente.')
  except IndexError as e:
    print(f'A quantidade de elementos em cada lista é diferente')
  except TypeError as e:  
    print(f"Lista contém valores incoerentes.")
  except Exception as e:
    print(f'Um erro ocorreu {e} - {type(e)}')        
  else:
    return listaTuplas


def caso1():
  '''
  Valores sem erro
  '''
  lista1 = [4,6,7,9,10]
  lista2 = [-4,6,8,7,9]
  try:
    listaagrupada = agruparListas(lista1, lista2)
  except Exception as e:
    print(f'Um erro ocorreu: {e} - {type(e)}')  
  else:
    print(listaagrupada)  


def caso2():
  '''
  Listas com tamanhos diferentes
  '''
  lista1 = [4,6,7,9,10,4]
  lista2 = [-4,6,8,7,9]
  try:
    listaagrupada = agruparListas(lista1, lista2)
  except Exception as e:
    print(f'Um erro ocorreu: {e} - {type(e)}')  
  else:
    print(listaagrupada)  


def caso3():
  '''
  Listas com valores incoerentes
  '''
  lista1 = [4,6,7,9,'A']
  lista2 = [-4,'E',8,7,9]

  try:
    listaagrupada = agruparListas(lista1, lista2)
  except Exception as e:
    print(f'Um erro ocorreu: {e} - {type(e)}')  
  else:
    print(listaagrupada)  


caso1()
caso2()
caso3()
4 respostas
solução!

Olá, Marcelo! Como vai?

Parabéns pela resolução da atividade!

Observei que você explorou o tratamento de exceções para garantir robustez com Python, utilizou muito bem o bloco try/except para lidar com diferentes cenários e ainda compreendeu a importância da estrutura else/finally para organizar o fluxo de execução.

Continue postando as suas soluções, com certeza isso ajudará outros estudantes e tem grande relevância para o fórum. E uma dica interessante para o futuro é simplificar a captura de erros agrupando exceções em uma mesma cláusula. Assim:

try:
    num1 = float(input("Digite o primeiro número: "))
    num2 = float(input("Digite o segundo número: "))
    resultado = num1 / num2
except (ZeroDivisionError, ValueError) as e:
    print(f"Ocorreu um erro: {e}")
else:
    print(f"O resultado da divisão é: {resultado}")

Isso faz com que diferentes tipos de erro sejam tratados de forma mais enxuta em um único bloco.

Alguns materiais podem estar em inglês, mas é possível compreendê-los usando o recurso de tradução de páginas do próprio navegador.

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

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

Show essa dica de agrupar, obrigado

#3 faltou passar a lista

#4 acho que a resolução está errada, pra mim não apresenta Saída, se é que tem. Eu removi o espaço que estava em "lista 2" > "lista2", tem mais algum erro além desse?

Olá Jemima, tudo bem com você?

sobre exercício #3

Esta comentado as listas, eu testei as 3 uma a uma e deixei comentado, não quis fazer um teste pra cada com funções e rodar juntas.

def converterListaToFloat(lista):
  try:
    for i in range(len(lista)):
      lista[i] = float(lista[i])
  except ValueError as e:
    print(f"Ocorreu um erro: {type(e)} - {e}")
  else:
    return lista  
  finally:
    print(f'Fim da execução da função')


#lista =[1,2,3,4,5,6]
#lista =[1,2,'a',4,5,6]
lista = [1.0, 2.0]

listaFloat = converterListaToFloat(lista)  # A LISTA E PASSADA AQUI

print(listaFloat)  # A LISTA CONVERTIDA É IMPRESSA AQUI

Saída caso 1:

Fim da execução da função
[1.0, 2.0]

Trocando a lista


#lista =[1,2,3,4,5,6]
lista =[1,2,'a',4,5,6]
#lista = [1.0, 2.0]

saída caso 2:
Ocorreu um erro: <class 'ValueError'> - could not convert string to float: 'a'
Fim da execução da função
None

trocando a lista:

lista =[1,2,3,4,5,6]
#lista =[1,2,'a',4,5,6]
#lista = [1.0, 2.0]

**
saída caso 3:**

Fim da execução da função
[1.0, 2.0, 3.0, 4.0, 5.0, 6.0]

Sobre o exercídio #4

Apresenta saída, deixe-me mostrar, pra cada caso.
No caso de não ter a lista, por causa do tratamento de erro, a saída é a mensagem e a lista volta None.

saída:
[(4, -4, 0), (6, 6, 12), (7, 8, 15), (9, 7, 16), (10, 9, 19)]
A quantidade de elementos em cada lista é diferente
None
Lista contém valores incoerentes.
None

ou seja:

caso 1- Valores sem erro:
entrada:
lista1 = [4,6,7,9,10]
lista2 = [-4,6,8,7,9]

Saída:
[(4, -4, 0), (6, 6, 12), (7, 8, 15), (9, 7, 16), (10, 9, 19)]

caso2 - Listas com tamanhos diferentes :
entrada:
lista1 = [4,6,7,9,10,4]
lista2 = [-4,6,8,7,9]

saída:
A quantidade de elementos em cada lista é diferente
None

Caso3 - Listas com valores incoerentes :
entrada:
lista1 = [4,6,7,9,'A']
lista2 = [-4,'E',8,7,9]

saída:
Lista contém valores incoerentes.
None

Cada caso esta embutido em uma função de teste.

No código também não existe a comparação "lista 2" > "lista2", na função de agrupar listas temos if len(lista1) == len(lista2), acho que confundiu?

Você esta tendo algum problema pra rodar o mesmo código, posso ajudar?
Ei, Verifique se ao copiar e colar a indentação (espaços) não ficaram fora do lugar. Se precisar de ajuda entre em contato. Copie e colei mesmos códigos no colab e testei novamente e esta tudo ok.