En esta lección se tratan los tipos de datos lógicos, también llamados booleanos.
Los ejemplos de esta lección muestran el resultado de ejecutar las operaciones en el prompt de IDLE.
Una variable booleana es una variable que sólo puede tomar dos posibles valores: True (verdadero) o False (falso).
En Python cualquier variable (en general, cualquier objeto) puede considerarse como una variable booleana. En general los elementos nulos o vacíos se consideran False y el resto se consideran True.
Para comprobar si un elemento se considera True o False, se puede convertir a su valor booleano mediante la función bool().
>>> bool(0) False >>> bool(0.0) False >>> bool(0 + 0j) False >>> bool("") False >>> bool(None) False >>> bool(()) False >>> bool([]) False >>> bool({}) False
>>> bool(25) True >>> bool(-9.5) True >>> bool(1 + 1j) True >>> bool("abc") True >>> bool((1, 2, 3)) True >>> bool([27, "octubre", 1997]) True >>> bool({27, "octubre", 1997}) True
Los operadores lógicos son unas operaciones que trabajan con valores booleanos.
>>> True and True True >>> True and False False >>> False and True False >>> False and False False
Estos resultados se suelen escribir en forma de tabla.
and | T | F |
---|---|---|
T | T | F |
F | F | F |
>>> True or True True >>> True or False True >>> False or True True >>> False or False False
Estos resultados se suelen escribir en forma de tabla de doble entrada.
or | T | F |
---|---|---|
T | T | T |
F | T | F |
Nota: En el lenguaje cotidiano, el "o" se utiliza a menudo en situaciones en las que sólo puede darse una de las dos alternativas. Por ejemplo, en un menú de restaurante se puede elegir "postre o café", pero no las dos cosas (salvo que se pague aparte, claro). En lógica, ese tipo de "o" se denomina "o exclusivo" (xor).
>>> not True False >>> not False True
Estos resultados se suelen escribir en forma de tabla de doble entrada.
not | |
---|---|
T | F |
F | T |
Si no se está acostumbrado a evaluar expresiones lógicas compuestas, se recomienda utilizar paréntesis para asegurar el orden de las operaciones.
Al componer expresiones más complejas hay que tener en cuenta que Python evalúa primero los not, luego los and y por último los or, como puede comprobarse en los ejemplos siguientes:
>>> not True and False False >>> (not True) and False False >>> not (True and False) True
>>> not False or True True >>> (not False) or True True >>> not (False or True) False
>>> False and True or True True >>> (False and True) or True True >>> False and (True or True) False
>>> True or True and False True >>> (True or True) and False False >>> True or (True and False) True
En las expresiones lógicas se pueden utilizar valores distintos de True o False, que Python convierte a True o False para poder evaluar las expresiones. Como se ha comentado al principio de esta lección, todos los valores se consideran True, menos el cero (0 entero, 0.0 decimal o 0+0j complejo), la cadena vacía "" y en general los elementos vacíos (tupla vacía (), lista vacía [], rango vacío range(0), conjunto o diccionario vacíos {}, etc.), que se consideran False.
Al utilizar valores distintos a True o False en las expresiones lógicas, el resultado puede estar expresado mediante estos valores:
>>> 3 or 4 3
Si se quieren mostrar valores booleanos, se puede convertir el resultado a un valor booleano:
>>> 3 or 4 3 >>> bool(3 or 4) # Verdadero porque 3 es diferente de 0 True
Nota: En la lección Detalles de Python se comenta con más detalle por qué Python da estos resultados.
Las comparaciones también dan como resultado valores booleanos:
>>> 3 > 2 True >>> 3 < 2 False
>>> 2 >= 1 + 1 True >>> 4 - 2 <= 1 False
>>> 2 == 1 + 1 True >>> 6 / 2 != 3 False
Es importante señalar que en matemáticas el signo igual se utiliza tanto en las asignaciones como en las comparaciones, mientras que en Python (y en otros muchos lenguajes de programación):
Cuando se aprende a programar es habitual confundir una cosa con la otra (el error más frecuente es escribir una sola igualdad en las comparaciones), por lo que se recomienda prestar atención a este detalle.
Python permite encadenar varias comparaciones y el resultado será verdadero si y sólo si todas las comparaciones lo son.
>>> 4 == 3 + 1 > 2 True >>> 2 != 1 + 1 > 0 False
Encadenar comparaciones no está permitido en otros lenguajes como PHP, en los que las comparaciones deben combinarse mediante operadores lógicos and, lo que también puede hacerse en Python:
>>> 4 == 3 + 1 and 3 + 1 > 2 True >>> 2 != 1 + 1 and 1 + 1 > 0 False