[pyar] Consulta BASICA sobre valor de retorno

Edgardo edgardolor en gmail.com
Jue Sep 7 23:10:07 ART 2017


Gracias Lucio, justo le respondí a Tomas sin ver tu nuevo mensaje.
Espero me aclaren la última duda y doy por resuelto el tema :D

El 7 de septiembre de 2017, 20:42, Edgardo <edgardolor en gmail.com> escribió:

> Muchas gracias Tomas, ahora me quedo muchisimo mas claro. Y por lo que
> concluyo que siempre es mejor que el valor de que me tiene que devolver
> este precedido por un RETURN verdad? ya que si hay un print la función me
> imprimiría cada if/else + el último "mes inexistente"?
>
> Muchas gracias!!!
>
> El 7 de septiembre de 2017, 20:31, Tomas Zulberti <tzulberti en gmail.com>
> escribió:
>
>> 2017-09-07 20:20 GMT-03:00 Edgardo <edgardolor en gmail.com>:
>> > Buenas tardes gente linda.
>> >
>> > Estoy aprendiendo Python de forma autodidacta con la ayuda de este libro
>> > "How to think like a Computer Scientist" 3ra Edicion, que me lo
>> recomendaron
>> > por aqui.
>> > En el cap 6 se ve Valor de Retorno y tengo algunas dudas.
>> > El problema solicita que el usuario ingrese un nombre de mes y se cree
>> una
>> > f() que en base al nombre ingresado devuelva la cant de días que posee
>> dicho
>> > mes.
>> > La f() la saque enseguida, la copio:
>> >
>> > def days_in_month(x):
>> >     month =
>> > {"Enero":31,"Febrero":28,"Marzo":31,"Abril":30,"Mayo":31,"
>> Junio":30,"Julio":31,"Agosto":31,"Septiembre":30,"Octubre":
>> 31,"Noviembre":30,"Diciembre":31}
>> >     for c, v in month.items():
>> >         if x == c:
>> >             if x == "Febrero":
>> >                 return "El mes de {} posee {} dias. Salvo los años
>> > biciestos".format(c, v)
>> >             else:
>> >                 return "El mes de {} posee {} dias.".format(c, v)
>> >         # return None
>> > print(days_in_month("Febrero"))
>> > print(days_in_month("Osvaldo"))
>> > print(days_in_month("Septiembre"))
>> >
>> > Lo que no comprendo es porque NO puedo colocar en el primer IF, al
>> final, el
>> > return None. Haciéndolo me da como resultado que la función siempre
>> devuelva
>> > None. Como ven ahi esta comentado y la f() funciona correctamente y
>> cuando
>> > se ingresa un nombre de mes incorrecto, como en la segunda llamada,
>> > automáticamente devuelve None.
>> > La duda surge a raiz de que en lugar del "return None" decide que en
>> caso de
>> > no cumplir la condicion del primer IF, haya un "else" que me devuelva un
>> > error de Valor inexistente, asi:
>> >
>> > def days_in_month(x):
>> >     month =
>> > {"Enero":31,"Febrero":28,"Marzo":31,"Abril":30,"Mayo":31,"
>> Junio":30,"Julio":31,"Agosto":31,"Septiembre":30,"Octubre":
>> 31,"Noviembre":30,"Diciembre":31}
>> >     for c, v in month.items():
>> >         if x == c:
>> >             if x == "Febrero":
>> >                 return "El mes de {} posee {} dias. Salvo los años
>> > biciestos".format(c, v)
>> >             else:
>> >                 return "El mes de {} posee {} dias.".format(c, v)
>> >         else:
>> >             return "Mes inexistente"
>> > print(days_in_month("Febrero"))
>> > print(days_in_month("Osvaldo"))
>> > print(days_in_month("Septiembre"))
>> >
>> >
>> > Pero ese ultimo return lo que produce es que CADA llamada devuelve
>> SIEMPRE
>> > ese ultimo return, aun cuando el nombre del mes es correcto.
>> > Por ultimo me gustaria consultarles si es RECOMENDABLE que en lugar de
>> un
>> > return haya un print y evitar pasarle al print final la llamada a la
>> > funcion. Asi:
>> >
>> > def days_in_month(x):
>> >     month =
>> > {"Enero":31,"Febrero":28,"Marzo":31,"Abril":30,"Mayo":31,"
>> Junio":30,"Julio":31,"Agosto":31,"Septiembre":30,"Octubre":
>> 31,"Noviembre":30,"Diciembre":31}
>> >     for c, v in month.items():
>> >         if x == c:
>> >             if x == "Febrero":
>> >                 print("El mes de {} posee {} dias. Salvo los años
>> > biciestos".format(c, v))
>> >             else:
>> >                 print("El mes de {} posee {} dias.".format(c, v))
>> >         else:
>> >             return "Mes inexistente"
>> > days_in_month("Febrero")
>> > days_in_month("Osvaldo")
>> > days_in_month("Septiembre")
>> >
>> > El hecho es que esa última forma de establecer el código hace que
>> gracias a
>> > ese último "else" el mismo no funcione. Sacando el else + return los
>> meses
>> > que están bien ingresados los devuelve correctamente, excepto el 2do.
>> >
>> > Desde ya muchas gracias y espero con ansias sus respuestas.
>> >
>>
>> Buenas.
>>
>> La forma correcta, seria que al final del for sino salio del mismo
>> devuelvas mes inexistente. Por ejemplo, podes hacer algo como esto
>>
>>
>> def days_in_month(x):
>>     month = {"Enero":31,"Febrero":28,"Marzo":31,"Abril":30,"Mayo":31,"
>> Junio":30,"Julio":31,"Agosto":31,"Septiembre":30,"Octubre":
>> 31,"Noviembre":30,"Diciembre":31}
>>     for c, v in month.items():
>>         if x == c:
>>             if x == "Febrero":
>>                 return "El mes de {} posee {} dias. Salvo los años
>> biciestos".format(c, v)
>>             else:
>>                 return "El mes de {} posee {} dias.".format(c, v)
>>
>>     return "Mes inexistente"
>>
>>
>> print(days_in_month("Febrero"))
>> print(days_in_month("Osvaldo"))
>> print(days_in_month("Septiembre"))
>>
>>
>> De esa forma:
>>
>> - Si el mes es valido, entonces va a terminar la funcion por el return
>> del "El mes..."
>> - Si el valor es invalid, entonces nunca va salir por que nunca se da
>> el caso de x == c, y por lo tanto el for va a terminar. Por eso
>> identificas en ese caso de que es un mes invalido
>>
>> Saludos,
>> Tomas Zulberti
>>
>> pd: Como estas usando un dicionario para month, podes directamente hacer:
>> if x in month:
>>      v = month[x]
>>      if x == 'Febrero':
>>          return "El mes de {} posee {} dias. Salvo los años
>> biciestos".format(c, v)
>>      else:
>>          return "El mes de {} posee {} dias.".format(c, v)
>> else:
>>     return "Mes inexistente"
>>
>> > Edgardo!!!!!!!!!!
>> >
>> >
>> >
>> >
>> > _______________________________________________
>> > Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
>> > Sitio web: http://www.python.org.ar/
>> >
>> > Para administrar la lista (o desuscribirse) entrar a
>> > http://listas.python.org.ar/listinfo/pyar
>> >
>> > La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>> > Argentina - http://www.usla.org.ar
>> _______________________________________________
>> Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
>> Sitio web: http://www.python.org.ar/
>>
>> Para administrar la lista (o desuscribirse) entrar a
>> http://listas.python.org.ar/listinfo/pyar
>>
>> 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/20170907/6ea47a14/attachment.html>


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