[pyar] Consulta BASICA sobre valor de retorno

Edgardo edgardolor en gmail.com
Jue Sep 7 20:42:41 ART 2017


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/fd195a24/attachment-0001.html>


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