[pyar] [Pyar] Comportamiento de funcion Return devuelve NONE
Santiago Paleka
santiagopaleka en gmail.com
Mie Mayo 25 09:17:21 ART 2016
El 25 de mayo de 2016, 5:33, Javier Baigorri <jbaigorri en hotmail.com>
escribió:
> Hola Fisa, Sebastian,
>
>
> Gracias por vuestro tiempo y sabiduria.
> He cambiado lo que me habeis enseñado en mi codigo.
> Esto fue muy util para mi. Muchas gracias.
>
>
> Pero no me exprese muy bien.
>
>
> La function *def lin(lista):*
> Cuando le paso un parametro con una *simple lista* me devuelve una cadena
> (esto es perfecto)
> Pero cuando le paso una *lista anidada* me devuelve *NONE*. (esto no esta
> bien)
>
>
> *Return con parametron de una lista de un nivel devuelve string (esto es
> correcto)*
> lst_un_nivel = [“lista”, “de”, “un”, “nivel”]
> line_result = Lin(lst_un_nivel)
> line_result es igual a “listadeunnivel”
>
>
> *Return con parametron de una lista anidada devuelve none (esto esin
> correcto)*
> lst_anidada = [[“lista”],[“anidada”]]
> line_result = lin(lst_anidada)
> line_result = none
>
>
>
>
> line_result:
>
> [['lst floor, GROUP A: 27.87m3 (12.47, 0.99, 14.41)Volume'], None, ['3rd
> floor, GROUP C: 8.05m3 (6.6, 0.67, 0.78)Volume']]
>
> -------------------------------
>
> valor:
>
> [['lst floor, GROUP A: 27.87m3 (12.47, 0.99, 14.41)Volume'], ['2nd floor,
> GROUP A: 147.08m3 Volume'], ['2nd floor, GROUP B: 102.82m3 (57.91,
> 44.91)Volume'], ['2nd floor, GROUP C: 64.2m3 Volume'], ['3rd floor, GROUP
> C: 8.05m3 (6.6, 0.67, 0.78)Volume']]
>
>
> Me gustaria que el parametro *line_result[]* fuera el mismo que *valor[]*
>
> y borrar el parametro* valor[]* de mi funcion que lo añadi para resolver
> el problema.
>
>
> PD.- Puse el commando print para ver lo que ocurria dentro de los bucles.
>
> Gracias,
> Saludos
>
>
> *Vuelvo a poner el codigo con vuestras nuevas sugerencias. Gracias*
> def lin(lista):
> for elem in lista:
> volume = 0
> volume_str = ""
> line_out = ""
> line_result = []
> if isinstance(elem, list):
> tmp = "es una lista"
> lin(elem)
> else:
> lst_num = lista[1:len(lista)-1]
> for k in lst_num:
> volume += k
> if not volume_str and len(lst_num) > 1 :
> #len(volume_str) == 0
> volume_str = "(" + str(k)
> elif len(lst_num) == 1:
> volume_str = str(k)
> else:
> volume_str = volume_str + ", " + str(k)
>
> if len(lst_num) > 1:
> volume_str = volume_str + ")"
>
>
> line_out = str(round(volume,2)) + "m3"
> if len(lista) > 3:
> line_out = line_out + " " + volume_str + "Volume"
> else:
> line_out = line_out + " Volume"
>
> line_out = lista[len(lista)-1] + ", " + lista[0] + ": " +
> line_out
> line_result.append(line_out)
> #print(line_result)
> valor.append(line_result)
> return line_result
>
>
>
> lst_total = []
>
> lst_a = ["GROUP A", 12.47,0.99,14.41,"lst floor"]
> lst_b = [["GROUP A",147.08,"2nd floor"],["GROUP B",57.91,44.91,"2nd
> floor"],["GROUP C",64.2,"2nd floor"]]
> lst_c = ["GROUP C",6.6,0.67,0.78,"3rd floor"]
>
> lst_total.append(lst_a)
> lst_total.append(lst_b)
> lst_total.append(lst_c)
>
> tmp_line = []
> cant = 0
> line_str = ""
> lineResult = [] #Variable global donde se guardan los strings entrados
> con "return"
> valor = [] #Variable global para recoger todos los strings en una
> lista
>
> for j in range(0, len(lst_total)):
> tmp_line = lst_total[j]
> line_str = lin(tmp_line)
> lineResult.append(line_str)
>
> print("line_result:")
> print(lineResult)
> print("-----")
> print("valor:")
> print(valor)
>
>
>
>
>
> ------------------------------
> From: sebastian.bassi en globant.com
> Date: Tue, 24 May 2016 14:34:04 -0700
> To: pyar en python.org.ar
> Subject: Re: [pyar] [Pyar] Comportamiento de funcion Return devuelve NONE
>
> Algunas cosas:
>
> On Mon, May 23, 2016 at 5:36 AM, Javier Baigorri <jbaigorri en hotmail.com>
> wrote:
>
>
>
> for k in range(0,len(lstNum)):
>
>
>
> volume = volume +
>
> lstNum[k]
>
>
> Si lo que queres es "recorrer" todos los elementos de
>
> lstNum, deberias hacer directamente:
>
>
> for k in lstNum:
>
>
> volume = volume +
>
> k
>
> Lo que se puede escribir tambien como:
>
>
> for k in lstNum:
>
>
> volume +=
>
> k
>
> Aunque en Python se acostumbra a escribir los nombres en minúscula
> (Pep8), por ej:
>
>
> for k in lst_num:
>
>
> volume +=
>
> k
>
> Si queres comprobar que una cadena este "vacia" (y de True en ese caso),
> yo cambiaria esto:
>
>
>
>
> if len(volumeStr) == 0 and len(lstNum) > 1 :
>
>
> Por esto:
>
>
> if not volumeStr and len(lstNum) > 1:
>
> return lnResult
> break
>
>
> Este break está de mas, es una código inalcanzable.
>
>
> Saludos,
> SB
>
>
> The information contained in this e-mail may be confidential. It has been
> sent for the sole use of the intended recipient(s). If the reader of this
> message is not an intended recipient, you are hereby notified that any
> unauthorized review, use, disclosure, dissemination, distribution or
> copying of this communication, or any of its contents,
> is strictly prohibited. If you have received it by mistake please let us
> know by e-mail immediately and delete it from your system. Many thanks.
>
>
>
> La información contenida en este mensaje puede ser confidencial. Ha sido
> enviada para el uso exclusivo del destinatario(s) previsto. Si el lector de
> este mensaje no fuera el destinatario previsto, por el presente queda Ud.
> notificado que cualquier lectura, uso, publicación, diseminación,
> distribución o copiado de esta comunicación o su contenido está
> estrictamente prohibido. En caso de que Ud. hubiera recibido este mensaje
> por error le agradeceremos notificarnos por e-mail inmediatamente y
> eliminarlo de su sistema. Muchas gracias.
>
>
> _______________________________________________ pyar mailing list
> pyar en python.org.ar http://listas.python.org.ar/listinfo/pyar PyAr -
> Python Argentina - Sitio web: http://www.python.org.ar/ La lista de PyAr
> esta Hosteada en USLA - Usuarios de Software Libre de Argentina -
> http://www.usla.org.ar
>
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
>
Javier,
Cuando llamás recursivamente a lin, perdés lo que te devuelve la función,
la llamás y no guardás en ningún lado el valor del return, luego sale de
ese if y sale de la función sin ningún return.
deberías hacer algo como esto:
def lin(lista):
for elem in lista:
volume = 0
volume_str = ""
line_out = ""
line_result = []
if isinstance(elem, list):
tmp = "es una lista"
line_result.append(lin(elem))
else:
lst_num = lista[1:len(lista)-1]
for k in lst_num:
volume += k
if not volume_str and len(lst_num) > 1 :
#len(volume_str) == 0
volume_str = "(" + str(k)
elif len(lst_num) == 1:
volume_str = str(k)
else:
volume_str = volume_str + ", " + str(k)
if len(lst_num) > 1:
volume_str = volume_str + ")"
line_out = str(round(volume,2)) + "m3"
if len(lista) > 3:
line_out = line_out + " " + volume_str + "Volume"
else:
line_out = line_out + " Volume"
line_out = lista[len(lista)-1] + ", " + lista[0] + ": " +
line_out
line_result.append(line_out)
#print(line_result)
valor.append(line_result)
return line_result
el return line_result lo tenés que hacer afuera del if else y el valor del
llamado recursivo a lin, lo ponés con append en line_result.
Saludos.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20160525/26ec09a1/attachment-0001.html>
Más información sobre la lista de distribución pyar