[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