Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Ajuda = Erro no retorno de função (Lista para String)

Prezados,

Estou tentando fazer um exercício para python que consiste na criação de função que pegue os valores de uma lista e retorne uma string com os valores separados por vírgulas e um "e" antes do último valor.

Assim, criei uma lista de exemplo:

minha_lista = ['pato', 'marreco', 'galo', 'papagaio', 'gaivota']

Depois fiz a seguinte função:

def criar_string(lista):

  for alimento in lista:

   if alimento in lista:
     pri_parte = lista[:-1]
     seg_parte = lista[-1]

  pri_parte_string = ', '.join(pri_parte)
  seg_parte_string = ''.join(seg_parte)

  print = pri_parte_string + ' e ' + seg_parte_string

O compilador não retorna nenhum erro. Entretanto, ao chamar a função, não aparece resultado nenhum. Não tem o print da string.

criar_string(minha_lista)

Alguém poderia me ajudar?

4 respostas

Oi Yuri, como vai?

A sintaxe do print está incorreta em seu código. O correto é abertura de parênteses, você utilizou o sinal de igualdade. Tente da seguinte forma:

print(pri_parte_string + ' e ' + seg_parte_string)

Um adendo, é que não há necessidade do uso do laço de repetição, apenas o slice da lista já é suficiente para você separar a última palavra das demais. Por exemplo:

def criar_string(lista):

  pri_parte = lista[:-1] # pega todas as palavras em exceto a última
  seg_parte = lista[-1] # pega a última palavra da lista

  pri_parte_string = ', '.join(pri_parte)
  seg_parte_string = ''.join(seg_parte)

  print(pri_parte_string + ' e ' + seg_parte_string)

minha_lista = ['pato', 'marreco', 'galo', 'papagaio', 'gaivota']

criar_string(minha_lista)

Qualquer dúvida estou por aqui.

Abraços e bons estudos!

Agradeço a atenção! Entretanto, os códigos retornaram erros.

Usando minha estrutura com laço de repetição e alterando a sintaxe do print, conforme orientação, o código ficou assim:

def criar_string(lista):

  for alimento in lista: # CONSEGUI!!!

   if alimento in lista:
     pri_parte = lista[:-1]
     seg_parte = lista[-1]

  pri_parte_string = ', '.join(pri_parte)
  seg_parte_string = ''.join(seg_parte)

  print(pri_parte_string + ' e ' + seg_parte_string)

O compilador não retornou nenhum erro, mas, ao chamar a função, aparece o seguinte:

TypeError                                 Traceback (most recent call last)
<ipython-input-152-1c5ba58286cb> in <module>()
----> 1 criar_string(minha_lista)

<ipython-input-151-ba6f4a457f05> in criar_string(lista)
     10   seg_parte_string = ''.join(seg_parte)
     11 
---> 12   print(pri_parte_string + ' e ' + seg_parte_string)
     13 

TypeError: 'list' object is not callable

Já seguindo o código sem estrutura de lação de repetição, o código fica assim:

def criar_string(lista):

  pri_parte = lista[:-1] # pega todas as palavras em exceto a última
  seg_parte = lista[-1] # pega a última palavra da lista

  pri_parte_string = ', '.join(pri_parte)
  seg_parte_string = ''.join(seg_parte)

  print(pri_parte_string + ' e ' + seg_parte_string)

Novamente o compilador não retorna nenhum erro. Entretanto, ao chamar a função ocorre o que segue:

TypeError                                 Traceback (most recent call last)
<ipython-input-148-1c5ba58286cb> in <module>()
----> 1 criar_string(minha_lista)

<ipython-input-146-10e4c4b72955> in criar_string(lista)
      7   seg_parte_string = ''.join(seg_parte)
      8 
----> 9   print(pri_parte_string + ' e ' + seg_parte_string)
     10 

TypeError: 'list' object is not callable

Alguma orientação?

solução!

Yuri, executei o seu código(com o laço) e o sugerido no PyCharm e pelo ipython e obtive o resultado esperado. O erro de TypeError: 'list' object is not callable ocorre quando invoco a variável minha_lista dessa maneira: minha_lista():

image

Abaixo, clique em run para executar o código:

Qual IDE você está utilizando para executar o código? Talvez seja necessário apagar a função e reescrevê-la novamente para que seja reconhecido da maneira correta.

Obrigado!

Estou usando o Google Colab mesmo.

Deu certo quando copiei seu código e colei no Colab, em um novo notebook.

O meu continua sem funcionar. Pior que, para mim, parecem idênticos os códigos, mesmo a indentação.

De toda sorte, o código funciona, mas o mistério permanece.

Agradeço!