[pyar] Consulta BASICA sobre valor de retorno

LUCIO DELELIS ldelelis en est.frba.utn.edu.ar
Jue Sep 7 20:33:59 ART 2017


Hola Edgardo,

Sobre tu consulta del else después del primer if, te devuelve siempre el
mes inexistente ya que sólo comprara en la primer iteracion del
diccionario. Si haces la prueba de hacer print de la función con Enero vas
a ver que te devuelve el mes correcto. Para que devuelva un "Mes Inválido"
como vos queres, ese return tendría que estar después del for, no del if.

Espero haber podido ayudarte :)

Saludos, Lucio

On Sep 7, 2017 20:20, "Edgardo" <edgardolor en gmail.com> wrote:

> 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.
>
> 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
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20170907/b8f3b2b1/attachment.html>


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