[pyar] Consulta BASICA sobre valor de retorno

Angel Java Lopez ajlopez2000 en gmail.com
Jue Sep 7 23:16:25 ART 2017


Hola gente!

No trabajo en Python... pero por que hacer un for? No se puede consultar el
mapa por la clave x? Y si no existe valor, entonces print de que no existe
o algo asi

En otros lenguajes, no se haria for, sino algo como

if meses.containsKey(x)

...

Nos leemos!

Angel "Java" Lopez
@ajlopez


2017-09-07 23:10 GMT-03:00 Edgardo <edgardolor en gmail.com>:

> 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,"Ju
>>> nio":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,"Ju
>>> nio":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,"Ju
>>> nio":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,"Ju
>>> nio":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
>>
>>
>>
>
> _______________________________________________
> 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/c8751ddf/attachment-0001.html>


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