[pyar] [Pyar] Comportamiento de funcion Return devuelve NONE

Javier Baigorri jbaigorri en hotmail.com
Mie Mayo 25 05:33:27 ART 2016


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. Graciasdef 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 = 0line_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 		 	   		  
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20160525/74019953/attachment-0001.html>


Más información sobre la lista de distribución pyar