¿Qué es la lógica booleana?
La lógica booleana en programación es un sistema matemático que permite trabajar con valores de verdadero y falso.
Basándose en esos dos valores, podemos hacer comparaciones lógicas para que el programa llegue a conclusiones y actúe de diferentes formas según los resultados.
Espacio publicitario
Los operadores de comparación
Los operadores de comparación se utilizan para comparar dos valores y determinar si son iguales, diferentes, mayores o menores que otros. Estos operadores son necesarios para la lógica de programación.
Operadores de comparación se traduce al inglés como comparison operators.
Con el uso de estos operadores comparativos hablamos siempre de valores en la izquierda y en la derecha de la comparación.
Aquí tienes un ejemplo:
valor_izquierda == valor_derecha
El valor de la izquierda de la comparación es el que se
compara con el valor de la derecha. Entonces, en el
siguiente ejemplo, se compara si el valor
10
(izquierda) es igual (==
) que
el valor 20
(derecha):
10 == 20
El intérprete de Python resuelve estas expresiones dejando
un valor booleano True
o False
,
dependiendo de lo que evalúe en la expresión. En el
ejemplo anterior la expresión deja un valor
False
, puesto que no es verdad que
10
sea igual que 20
. El
intérprete nos dice que la comparación hecha es falsa.
Muy pronto empezarás a utilizar los operadores de comparación con las estructuras de control de flujo (condicionales y bucles). Con estas conseguirás que el programa pueda tomar decisiones, haciéndolo más “inteligente”. Sin embargo, primero debes entender cómo funciona la lógica booleana. Esto hará que aprendas a manejar más fácilmente estas estructuras.
En los siguientes ejemplos, con el fin de que te habitúes
a esta lógica booleana, haremos las comparaciones en
variables, para que se guarde uno de estos valores
booleanos en ellas, y los puedas ver con tus propios ojos.
Si la comparación es cierta, nos dejará en la variable un
valor True
, y si es falsa un valor
False
.
Aquí tienes los operadores de comparación que vamos a utilizar:
Operador | Descripción |
---|---|
== |
Igual que |
!= |
Diferente que |
< |
Menor que |
> |
Mayor que |
<= |
Menor o igual que |
>= |
Mayor o igual que |
Espacio publicitario
Operador de comparación igual que
El operador de comparación igual que (==
)
compara si el valor de la izquierda, es igual que el de la
derecha. Si esto es así, se devolverá un valor
True
. En caso contrario un valor
False
.
El término igual que, en inglés se dice equal to.
No confundas el operador igual que, con el operador de asignación.
Tabla comparativa del operador igual que
Esta tabla con valores de ejemplo muestra los posibles resultados de este operador:
Valor en la izquierda | Valor en la derecha | Resultado |
---|---|---|
10 | 15 | False |
15 | 10 | False |
10 | 10 | True |
En el siguiente ejemplo tenemos dos números en dos variables, y una comparación booleana en la tercera:
a = 10
b = 15
comparacion = a == b
print(comparacion)
False
En este caso, el valor de la variable a no es igual que el
de la variable b
, con lo que el resultado de
la comparación nos deja en la variable
comparacion
un valor False
.
En cambio, si son iguales el intérprete de Python nos dice que es verdadero:
a = 10
b = 10
comparacion = a == b
print(comparacion)
True
Espacio publicitario
Operador de comparación diferente que
El operador de comparación diferente que
(!=
), también conocido como no igual, nos
devuelve un resultado True
si los valores son
diferentes, y False
si son iguales. Es decir,
es todo lo contrario al operador igual que.
El término no igual en inglés se traduce como not equal.
Si hablamos de diferente que, se traduce como different from.
Tabla comparativa del operador diferente que
Aquí tienes una tabla de ejemplo para el operador diferente que:
Valor en la izquierda | Valor en la derecha | Resultado |
---|---|---|
10 | 15 | True |
15 | 10 | True |
10 | 10 | False |
En la siguiente comparación nos da un valor
True
, puesto que el valor de la variable
a
es diferente que el de la variable
b
:
a = 10
b = 15
comparacion = a != b
print(comparacion)
True
En cambio, en esta otra comparación nos devuelve un valor
False
, puesto que los dos valores son
iguales:
a = 10
b = 10
comparacion = a != b
print(comparacion)
False
Espacio publicitario
Operador de comparación mayor que
El operador de comparación mayor que (>
),
devuelve True
si el valor de la izquierda es
mayor que el de la derecha. En caso contrario devuelve
False
.
Tabla comparativa del operador mayor que
Valor en la izquierda | Valor en la derecha | Resultado |
---|---|---|
10 | 15 | False |
15 | 10 | True |
10 | 10 | False |
El término mayor que en inglés se traduce como greater than.
El siguiente ejemplo nos devuelve un resultado
False
, puesto que el valor de la variable
a
no es mayor que el de la variable
b
:
a = 10
b = 15
comparacion = a > b
print(comparacion)
False
Operador de comparación menor que
El operador de comparación menor que (<) es todo lo
contrario al operador mayor que. Si el valor de la
izquierda es menor que el de la derecha, devuelve
True
. En caso contrario, False
.
Tabla comparativa del operador menor que
Valor en la izquierda | Valor en la derecha | Resultado |
---|---|---|
10 | 15 | True |
15 | 10 | False |
10 | 10 | False |
El término menor que en inglés se traduce como less than.
El siguiente ejemplo nos devuelve un resultado
True
, puesto que el valor de la variable
a
es menor que el de la variable
b
:
a = 10
b = 15
comparacion = a < b
print(comparacion)
True
Espacio publicitario
Operador de comparación mayor o igual que
El operador mayor o igual que (>=) es una mezcla del
operador mayor que y el operador igual que. Este nos
devuelve True
siempre que el valor de la
izquierda sea mayor o igual que el de la derecha.
Tabla comparativa del operador mayor o igual que
Valor en la izquierda | Valor en la derecha | Resultado |
---|---|---|
10 | 15 | False |
15 | 10 | True |
10 | 10 | True |
El término mayor o igual que en inglés se traduce como greater than or equal to.
Mira el siguiente ejemplo:
a = 10
b = 10
comparacion = a >= b
print(comparacion)
True
Puesto que el valor de la variable a
, es
igual que el de la variable b
, nos devuelve
un True
.
Operador de comparación menor o igual que
El operador menor o igual que (<=), espera que el valor
de la izquierda sea menor o igual que el de la derecha. Si
se cumple eso, recibiremos un True
.
Tabla comparativa del operador menor o igual que
Valor en la izquierda | Valor en la derecha | Resultado |
---|---|---|
10 | 15 | True |
15 | 10 | False |
10 | 10 | True |
Menor o igual que se traduce en inglés como less than or equal to.
Aquí tienes un ejemplo de uso:
a = 10
b = 15
comparacion = a <= b
print(comparacion)
True
Puesto que el valor de la variable a
, es
menor que el de la variable b
, nos devuelve
un resultado True
.
Espacio publicitario
Los operadores lógicos
Los operadores lógicos son muy diferentes a los de comparación. Pero pese a ser diferentes, ambos tipos pueden ser utilizados en conjunto para crear expresiones más complejas, puesto que también devuelven resultados booleanos.
Operadores lógicos, en inglés se dice logical operators.
Con un operador lógico puedes encadenar y relacionar dos expresiones comparativas, obteniendo un resultado booleano de ambas.
Estos son los tres operadores lógicos que vamos a utilizar:
Operador | Descripción |
---|---|
and |
y lógico |
or |
o lógico |
not |
no lógico |
El operador lógico and
El operador lógico and
se utiliza para
combinar dos expresiones booleanas y evaluar si son
verdaderas o falsas en conjunto.
Si ambas expresiones son verdaderas, la expresión compuesta es verdadera. En el caso de que una o las dos expresiones sean falsas, la expresión compuesta es falsa.
La palabra
and
se traduce en español como “y”.
Tabla comparativa del operador lógico and
La siguiente tabla contiene las posibilidades utilizando
el operador and
:
Expresión 1 (izquierda) | Expresión 2 (derecha) | Resultado |
---|---|---|
True | True | True |
True | False | False |
False | True | False |
False | False | False |
La sintaxis de este operador es la siguiente:
expresión1 and expresión2
Para que entiendas mejor esta representación de sintaxis, te pongo un ejemplo con dos expresiones cualquiera:
a > b and c == d
En este ejemplo se compara en la primera expresión (la de
la izquierda) si el valor de la variable a
,
es mayor que el de la variable b
. Además,
tenemos la segunda expresión (la de la derecha), que
compara si el valor de la variable c
es igual
al de la variable d
. El resultado dependerá
de los valores que tengan las diferentes variables
evaluadas.
Espacio publicitario
Cada una de las dos expresiones devolverá un valor booleano por separado, y basándose en esos dos valores se hace una evaluación final de ambas. Dando un resultado como los que hay en la tabla anterior.
Entonces, supongamos que la primera expresión es verdadera
(a
es mayor que b
) y que la
segunda es falsa (c
no es igual que
d
). La comparación hasta este punto quedaría
así:
True and False
El operador and
, lo que va a hacer es
devolver finalmente un True
o un
False
, en torno a esos dos valores booleanos
recibidos en la resolución de las dos expresiones. Si
tenemos un True and False
, el resultado final
con el operador and
es False
.
Para que el operador and evalúe como True
,
ambas expresiones simples deben ser True. En cualquier
otro caso, siempre evalúa como False
. Siempre
que tengas dudas comprueba la tabla comparativa del
and
.
Ejemplo práctico con el operador and
A continuación tienes un ejemplo más ilustrativo del uso
del operador lógico and
.
Contamos con dos comparaciones diferentes. Cada una evalúa dos expresiones con el operador and. Finalmente, se imprime el resultado final.
a = 15
b = 17
c = 13
# Comparaciones
comparacion_1 = a < b and b > c
comparacion_2 = a > b and b > c
# Comprobamos los resultados
print(comparacion_1)
print(comparacion_2)
True
False
Para entender los cálculos que hace el intérprete de Python, debemos resolver las comparaciones paso a paso.
Resolviendo comparacion_1
comparacion_1 = a < b and b > c
En la primera comparación recibimos un valor final de
True
.
Resolvamos la expresión compleja. Primero, separamos cada expresión simple:
a = 15
b = 17
c = 13
-
a < b = True
(15 es menor que 17). -
b > c = True
(17 es mayor que 13).
Puesto que ambas expresiones devuelven True
,
el resultado final es True
.
Resolviendo comparacion_2
comparacion_2 = a > b and b > c
En la segunda comparación recibimos un valor final de
False
.
Resolvamos la expresión compleja. Primero, separamos cada expresión simple:
a = 15
b = 17
c = 13
-
a > b = False
(15 no es mayor que 17). -
b > c = True
(17 es mayor que 13).
En esta ocasión, en la primera expresión recibimos un
False
y en la segunda un True
.
Lo que nos da finalmente un resultado False
.
Espacio publicitario
El operador lógico or
El operador lógico or
compara también dos
expresiones, pero este es menos restrictivo que el
and
. En este caso, siempre se devuelve un
valor conjunto de True
, excepto cuando ambas
expresiones son False
.
La palabra or se traduce en español como “o”.
Tabla comparativa del operador lógico or
La siguiente tabla contiene las posibilidades utilizando
el operador or
:
Expresión 1 (izquierda) | Expresión 2 (derecha) | Resultado |
---|---|---|
True | True | True |
True | False | True |
False | True | True |
False | False | False |
La sintaxis de este operador es la siguiente:
expresión1 or expresión2
Ejemplo práctico con el operador or
A continuación, tienes un ejemplo más ilustrativo del uso
del operador lógico or
.
a = 15
b = 17
c = 13
# Comparaciones
comparacion_1 = a < b or b > c
comparacion_2 = a == b or b < c
# Comprobamos los resultados
print(comparacion_1)
print(comparacion_2)
True
False
Resolviendo comparacion_1
comparacion_1 = a < b or b > c
En la primera comparación recibimos un valor final de
True
.
Resolvamos la expresión compleja. Primero, separamos cada expresión simple:
a = 15
b = 17
c = 13
-
a < b = True
(15 es menor que 17). -
b > c = True
(17 es mayor que 13).
Ambas expresiones dan True
, por lo que en
conjunto, con el operador or
recibimos un
valor True
.
Resolviendo comparacion_2
comparacion_2 = a == b or b < c
En la segunda comparación, recibimos un valor final de
False
.
Resolvamos la expresión compleja. Primero, separamos cada expresión simple:
a = 15
b = 17
c = 13
-
a == b = False
(15 no es igual a 17). -
b < c = False
(17 no es menor que 13).
En esta ocasión, ambas expresiones dan False
,
por lo que el resultado final es False
.
Espacio publicitario
El operador lógico not
El operador lógico not se utiliza para negar el valor de una expresión booleana. Gracias a este, podremos expresar todo lo contrario a la propia expresión dada.
La palabra not se traduce en español como “no”
Explicado de forma más sencilla, el operador not invierte el valor de verdadero o falso de una expresión booleana. Si la expresión booleana es verdadera, el operador not la convierte en falsa, y si la expresión booleana es falsa, la convierte en verdadera. Al principio, esto puede ser algo confuso, pero ya verás que muy pronto le irás viendo la lógica.
Aquí tienes la sintaxis del operador not
:
not expresión
Ejemplo práctico con el operador not
A continuación, tienes un ejemplo más ilustrativo del uso
del operador lógico not
.
En el siguiente ejemplo, sin utilizar todavía el operador
not, estoy evaluando si el valor de la variable
a
, es igual al de la variable b
.
Puesto que no lo es, el resultado es False
.
Hasta aquí todo como era de esperar.
a = 5
b = 3
# Comparación
comparacion = a == b
# Comprobamos los resultados
print(comparacion)
False
Pues bien, en el siguiente ejemplo, puedes ver cómo se
invierte esta lógica booleana con el operador
not
:
a = 5
b = 3
# Comparación
comparacion = not a == b
# Comprobamos los resultados
print(comparacion)
True
Como era de esperar, según mis indicaciones, el resultado es todo lo contrario.
Espacio publicitario
Expresiones más complejas
Debes saber que puedes ir encadenando expresiones más complejas.
Por ejemplo:
print(not (10 > 7 and (10 == 11 or 11 != 10)))
False
Fíjate, en que también se pueden englobar operaciones lógicas con los paréntesis, y cambiar las prioridades.
Normalmente, intentaremos no representar una lógica booleana tan compleja. Simple es mejor que complejo, ya lo dice el propio Zen de Python. Sin embargo, este tipo de ejemplos de lógica booleana te puede venir bien para ir practicando.
El Zen de Python son una serie de frases que describen muy bien las peculiaridades y la filosofía del lenguaje de programación Python.
Vamos a resolver esta expresión tan compleja, parte por parte.
Primero, debemos resolver los paréntesis más internos, y luego los de los siguientes niveles. Es decir, de la expresión más interna a la más externa. Igual que el ejemplo del orden de resolución de las funciones que he mostrado en el capítulo anterior.
Empecemos por los pasos de resolución de la primera parte:
(10 == 11 or 11 != 10)
10 == 11
evalúa como False
.
11 != 10
evalúa como True
.
False or True
, da un resultado
True
.
La expresión en este punto queda así:
not (10 > 7 and (True))
Eliminamos los paréntesis internos:
not (10 > 7 and True)
10 > 7
evalúa como True
.
Nos queda la siguiente expresión:
not (True and True)
(True and True
) se resuelve como
True
, por lo que nos queda la expresión
not True
, que al invertir el valor booleano,
finalmente queda como False
.
Espacio publicitario
Espacio publicitario
Ejercicios de Python para resolver
Los siguientes ejercicios los puedes contestar mentalmente, sin ejecutar nada de código. No obstante, si prefieres, puedes añadir estas expresiones a tu hoja de código Python.
53. Mira las siguientes comparaciones, y contesta si
evalúan como True
o como False
.
10 == 10
26 != 26
26 == 15
45 != 54
10 > 10
260 < 48
26 > 15
45 < 54
10 >= 10
10 <= 10
260 <= 48
26 >= 15
45 <= 54
True
False
False
True
False
False
True
True
True
True
False
True
True
54. Si tenemos una evaluación como la siguiente, ¿qué resultado booleano da?
True and True
El resultado de evaluar True
and
True
, es True
.
55. ¿Y si tenemos estos valores en la expresión?
True and False
El resultado de evaluar True
and
False
, es False
56. A continuación, deberás resolver las siguientes expresiones. Utiliza estas cuatro variables para ir resolviendo cada una. ¿Serás capaz de resolverlas mentalmente?
a = 10
b = 15
c = 20
d = a
Contesta si las expresiones dan un resultado
True
o False
.
a < b and c > b
d == a and d != b
b <= c and c < a
a == a and d == a
a < b or c > b
d == a or d != a
b <= c or c > a
a == b or d != a
not (a < b or c > b)
not (d == a and d != b)
b <= c or (not c > a)
not (a == a and not d == a)
True
True
False
True
True
True
True
False
False
False
True
True
57. Resuelve las siguientes expresiones:
True or True
True or False
not (True or True)
not (False and True)
True
True
False
True
58. ¿Qué resultado booleano da la siguiente expresión compleja? ¿Sabrías explicar por qué?
Utiliza los valores de variable (a
,
b
, c
y d
) de uno de
los ejercicios anteriores (ejercicio 56).
not (a + b > 5 and c - 10 <= d or 10 == a)
La respuesta es True
. Veamos porqué.
Tenemos la siguiente expresión inicial:
not (a + b > 5 and c - 10 <= d or 10 == a)
A partir de ella, vamos resolviendo cada parte:
a + b > 5 and c - 10 <= d
Esta parte se resuelve así:
a + b > 5 (10 + 15 = 25 > 5) = True
c - 10 <= d (20 - 10 <= 10) = True
True and True = True
Nos queda la otra parte de los paréntesis:
10 == a (10 == 10) = True
Finalmente:
True or True = True
Esto deja los paréntesis resueltos como
True
.
not True = False
Es bastante complejo, pero por suerte, tenemos al intérprete de Python, que entre otras muchas cosas, resuelve estas operaciones de lógica por nosotros.
Sin embargo, como mínimo debes entenderlas.
Si en un futuro quieres crear algoritmos matemáticos muy complejos, debes empezar con operaciones “básicas” como esta.
Espacio publicitario