• Viernes 8 de Noviembre de 2024, 11:30

Autor Tema:  Funciones booleanas  (Leído 4430 veces)

neptun0

  • Nuevo Miembro
  • *
  • Mensajes: 7
  • Nacionalidad: ar
    • Ver Perfil
Funciones booleanas
« en: Miércoles 9 de Diciembre de 2009, 13:16 »
0
Buenas otra vez chic@s de SoloCodigo ! Otra vez con mis preguntas basicas :P

Estoy viendo el tema de funciones booleanas y me surgio una duda. Tengo el siguiente codigo:

Código: Python
  1. import random
  2.  
  3. def estaEntre(num_1,num_2,num_3):
  4.     return num_1 <= num_2 and num_2 <= num_3
  5.  
  6. var1 = random.randint(1,10)
  7. var2 = random.randint(1,10)
  8. var3 = random.randint(1,10)
  9.  
  10. print var1
  11. print var2
  12. print var3
  13.  
  14. estaEntre(var1,var2,var3)
  15.  
  16. raw_input("Pulse una tecla para salir ...")
  17.  

Mi pregunta es, al llamar a la funcion estaEntre(), no tendria que devolverme 1 en caso de que sea verdadera la sentencia luego del return ? No es una expresion booleana ?

Es algo que no termino de comprender, espero me puedan ayudar.

Un saludo y pido disculpas por estas dudas tan basicas ^_^

RadicalEd

  • Moderador
  • ******
  • Mensajes: 2430
  • Nacionalidad: co
    • Ver Perfil
Re: Funciones booleanas
« Respuesta #1 en: Miércoles 9 de Diciembre de 2009, 13:20 »
0
Sí, te está retornando un valor False, coloca:

Código: Python
  1. x = estaEntre(var1,var2,var3)
  2. print x
  3.  
El pasado son solo recuerdos, el futuro son solo sueños

neptun0

  • Nuevo Miembro
  • *
  • Mensajes: 7
  • Nacionalidad: ar
    • Ver Perfil
Re: Funciones booleanas
« Respuesta #2 en: Miércoles 9 de Diciembre de 2009, 15:31 »
0
Muchas gracias Edo ! Ya pude hacerlo funcionar correctamente ^_^

Dejo el problema en cuestion y como lo resolvi:

Citar
Como actividad, escriba una funcion estaEntre(x, y, z) que devuelva 1 en caso de que y <= x <= z y que devuelva 0 en cualquier otro caso.

Código: Python
  1. # Funcion para comprobar si un numero se encuentra entre otros dos
  2.  
  3. # Definicion de la funcion
  4.  
  5. def estaEntre(x, y, z):
  6.     return y <= x <= z
  7.  
  8. print "La funcion devuelve 1 en el caso de que el primer numero se encuentre entre medio de los otros dos"
  9. print "Ingrese los numeros: "
  10.  
  11. # Llamada a la funcion dentro de un condicional.
  12. # Solicitud de datos
  13.  
  14. if estaEntre(input("/"), input("/"), input("/")):
  15.     print 1
  16. else:
  17.     print 0
  18.  
  19. raw_input("Pulse ENTER para salir ...")
  20.  


Una pregunta mas :rolleyes: Los valores que devuelve la funcion son True o False, por lo que para que me devuelva 1 o 0 dependiendo el caso debo poner la funcion dentro de un condicional. Hay alguna manera, modificando algun archivo de configuracion o algo ( es algo que se me ocurrio, no se si en verdad se podra ) poder elegir que valores usa la funcion para retornar ? Osea, que devuelva 1 o 0 directamente ?

Y otra cosa, mas que nada pido alguna opinion. La forma en que escribo el codigo es legible ? Se que todavia son codigos bastante chicos y simples pero como recien estoy empezando con la programacion me gustaria ir tomando buenas costumbres desde ahora :P

Un saludo y gracias por adelantado ;)

rive08

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: Funciones booleanas
« Respuesta #3 en: Miércoles 9 de Diciembre de 2009, 17:49 »
0
Buen día Neptun0,

La verdad, no tengo idea si existe alguna configuración que te permita modificar cómo trabajar con las funciones booleanas.

Lo que si podrías hacer, es modificar un poco tu código, para que la inteligencia la tenga la función, o sea, que  "estaEntre" devuelva diréctamente "1" o "0".
De esta manera, te ahorrás tener que poner el if estaEntre:... cada vez que quieras devolver "1" o "0"
Traducido a código, y modificando el código que posteaste quedaría algo parecido a esto:

Código: Python
  1.  
  2. # # Funcion para comprobar si un numero se encuentra entre otros dos
  3. #
  4. # # Definicion de la funcion
  5. #
  6. def estaEntre(x, y, z):
  7.    if (y <= x <= z):
  8.       resultado = 1
  9.    else:
  10.       resultado = 0
  11.    return resultado
  12. #
  13. print "La funcion devuelve 1 en el caso de que el primer numero se encuentre entre medio de los otros dos"
  14. print "Ingrese los numeros: "
  15. #
  16. # # Llamada a la funcion dentro de un condicional.
  17. # # Solicitud de datos
  18. #
  19. consulta = estaEntre(input("/"), input("/"), input("/"))
  20.  
  21. print consulta
  22.  

Espero te sirva. .

RadicalEd

  • Moderador
  • ******
  • Mensajes: 2430
  • Nacionalidad: co
    • Ver Perfil
Re: Funciones booleanas
« Respuesta #4 en: Miércoles 9 de Diciembre de 2009, 17:52 »
0
Para eso si te tocaría una desición, ya que solo sé que Python retorna True y False; para tú legibilidad de código te felicito, pocos programadores se preocupan por eso; algo ha tener en cuenta es que debes comentar muy bien tú código y si creas una función debes explicar para qué sirve, qué recibe y qué retorna, otra cosa a tener en cuenta es que si por algun motivo tienes una variable de esta forma:
Código: Python
  1. a += 1 #Le suma 1 a la variable "a"
  2.  
Eso se ve feo, si es muy lógico lo que hace la variable entonces no debes colocarlo, y si quieres ser especifico entonces podrías:
Código: Python
  1. a += 1 #Se va incrementando la variable para sumar al final de la lista
  2.  
o algo por el estilo, si quieres tener buenas prácticas a la hora de escribir código Python te recomiendo La guía de estilo Python
El pasado son solo recuerdos, el futuro son solo sueños

neptun0

  • Nuevo Miembro
  • *
  • Mensajes: 7
  • Nacionalidad: ar
    • Ver Perfil
Re: Funciones booleanas
« Respuesta #5 en: Sábado 26 de Diciembre de 2009, 16:08 »
0
Buenas !

Antes que nada pido disculpas por no haber podido responder antes, no tuve mucho tiempo ^_^

@rive08: Si, es verdad. En un principio habia pensado poner el if dentro de la funcion, pero en el manual que estoy leyendo, para lo unico que utiliza la funcion es para evaluar la expresion booleana, y despues comprueba el valor dentro de un condicional ( A mi parecer es mas practico hacerlo como me decis vos, te ahorras repetir codigo, pero para tener alternativas :P )

@Edo: Gracias por los consejos y por el manual ! Como dije arriba, recien estoy empezando y me gustaria tomar buenas costumbres desde ahora =).

Muchas gracias a ambos, y perdon por la tardanza ^_^