Lógica en Python – Tipo Booleano



El tipo booleano, en términos generales, es una forma de representación de datos binarios, es decir, dos valores posibles únicamente: 0 (cero) y 1 (uno). Su nombre proviene del matemático George Boole, inventor de la Álgebra Booleana que precede a la aplicación en el campo de la programación.

Los dos valores posibles de este tipo de dato se prestan a diversas intepretaciones: Sí/No, Encendido/Apagado, Verdadero/Falso, entre otras; todo aquello que represente dos estados contrarios. En Python y los demás lenguajes de programación, se ha optado por las constantes True (1, verdadero) y False (0, falso).

>>> int(True)
1
>>> int(False)
0
>>> True == 1
True
>>> False == 0
True

Teniendo esto en cuenta, puedes operar con estas constantes como datos numéricos, ya que True y False son instancias del tipo bool, que hereda del tipo int.

>>> True + 1
2
>>> False - 1
-1
>>> (1 > 0) + 5
6

Sin embargo, al momento de evaluar una expresión, Python considera a todo valor distinto de cero como True y, por lo tanto, al cero como False. Observemos:

>>> bool(5)
True
>>> bool(0)
False
>>> bool(-3)
True

Este tipo de comprobación es la que se produce al utilizar las sentencias if o elif, se evalúa la expresión y, en caso de ser ésta verdadera, se ejecuta el código a continuación.

if 5:  # bool(5) -> True
    print("Este código es ejecutado.")

if 0:  # bool(0) -> False
    print("Nunca se ejecuta.")

Por lo tanto, es redundante igualar las expresiones condicionales con alguno de los dos valores.

a = True
if a == True:  # True == True
    print("Este código es ejecutado.")

Es directamente incorrecto emplear is para este tipo de comprobaciones (if a is True:). Simplemente debe utilizarse if a:.

La palabra not retorna el valor opuesto de aquel que se encuentre a su derecha.

>>> not True
False
>>> not False
True

De esta manera, el código resulta fácilmente legible. Por ejemplo:

encendido = False
if not encendido:  # not False -> True
    encender()

Al utilizarse el operador and (“y”) en una condición, todas las expresiones deben ser verdaderas para que ésta llegue a ejecutarse.

>>> True and False
False
>>> True and True
True
>>> False and False
False

Otros ejemplos:

encendido = False
conectado = True
if not encendido and conectado:  # (not False -> True) and True -> True
    encender()

No así el operador or (“o”), el cual retornará True si cualquiera de las expresiones es verdadera.

>>> True or False
True
>>> True or True
True
>>> False or False
False

De hecho, Python omite las demás expresiones al encontrar una verdadera.

>>> if 2 > 1 or b:
...     print("Ejecutar.")
...
Ejecutar.

El objeto b no ha sido definido, sin embargo, el código corre sin problemas, debido a que no es necesario verificar su valor porque ya ha encontrado una expresión verdadera anteriormente. No así al utilizar and.

>>> if 2 > 1 and b:
...     print("Ejecutar.")
...
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'b' is not defined

Para otro tipos de datos, como cadenas o instancias de diversas clases, la validación dependerá de la implementación de dichos objetos. Por ejemplo, una cadena es considerada verdadera cuando no está vacía.

>>> a = "Recursos Python"
>>> b = ""
>>> bool(a)
True
>>> bool(b)
False

Al momento de crear una clase, considera el método __nonzero__ en Python 2 o __bool__ en la rama 3.x.

>>> class C:
...     def __nonzero__(self):  # __bool__ en Python 3.
...             return False
...
>>> c = C()
>>> bool(c)
False

Si este método no está definido, se evalúa utilizando __len__. En ausencia de ambos, la instancia será siempre considerada True.

>>> class D:
...     pass
...
>>> d = D()
>>> bool(d)
True



Deja un comentario