Link Search Menu Expand Document

Operadores l贸gicos

Los operadores l贸gicos o logical operators nos permiten trabajar con valores de tipo booleano. Un valor booleano o bool es un tipo que solo puede tomar valores True o False. Por lo tanto, estos operadores nos permiten realizar diferentes operaciones con estos tipos, y su resultado ser谩 otro booleano. Por ejemplo, True and True usa el operador and, y su resultado ser谩 True. A continuaci贸n lo explicaremos mas en detalle.

OperadorNombreEjemplo
andDevuelve True si ambos elementos son TrueTrue and True = True
orDevuelve True si al menos un elemento es TrueTrue or False = True
notDevuelve el contrario, True si es Falso y viceversanot True = False

Operador and

El operador and eval煤a si el valor a la izquierda y el de la derecha son True, y en el caso de ser cierto, devuelve True. Si uno de los dos valores es False, el resultado ser谩 False. Es realmente un operador muy l贸gico e intuitivo que incluso usamos en la vida real. Si hace sol y es fin de semana, ir茅 a la playa. Si ambas condiciones se cumplen, es decir que la variable haceSol=True y la variable finDeSemana=True, ir茅 a la playa, o visto de otra forma irALaPlaya=(haceSol and finDeSemana).

print(True and True)   # True
print(True and False)  # False
print(False and True)  # False
print(False and False) # False

Operador or

El operador or devuelve True cuando al menos uno de los elementos es igual a True. Es decir, eval煤a si el valor a la izquierda o el de la derecha son True.

print(True or True)   # True
print(True or False)  # True
print(False or True)  # True
print(False or False) # False

Es importante notar que varios operadores pueden ser usados conjuntamente, y salvo que existan par茅ntesis que indiquen una cierta prioridad, el primer operador que se evaluar谩 ser谩 el and. En el ejemplo que se muestra a continuaci贸n, podemos ver que tenemos dos operadores and. Para calcular el resultado final, tenemos que empezar por el and calculando el resultado en grupos de dos y arrastrando el resultado hacia el siguiente grupo. El resultado del primer grupo ser铆a True ya que estamos evaluando True and True. Despu茅s, nos guardamos ese True y vamos a por el siguiente y 煤ltimo elemento, que es False. Por lo tanto hacemos True and False por lo que el resultado final es False

print(True and True and False)
#     |-----------|
#           True  and  False
#         |------------------|
#                False

Tambi茅n podemos mezclar los operadores. En el siguiente ejemplo empezamos por False and True que es False, despu茅s False or True que es True y por 煤ltimo True or False que es True. Es decir, el resultado final de toda esa expresi贸n es True.

print(False and True or True or False)
#     False and True = False
#               Fase or True = True
#                       True or False = True
# True

Operador not

Y por 煤ltimo tenemos el operador not, que simplemente invierte True por False y False por True. Tambi茅n puedes usar varios not juntos y simplemente se ir谩n aplicando uno tras otro. La verdad que es algo dif铆cil de ver en la realidad, pero simplemente puedes contar el n煤mero de not y si es par el valor se quedar谩 igual. Si por lo contrario es impar, el valor se invertir谩.

print(not True)  # False
print(not False) # True
print(not not not not True) # True

Dado que estamos tratando con booleanos, hemos considerado que usar True y False es lo mejor y m谩s claro, pero es totalmente v谩lido emplear 1 y 0 respectivamente para representar ambos estados. Y por supuesto los resultados no var铆an

print(not 0) # True
print(not 1) # False

Ejemplos

Antes de entrar con los ejemplos, es importante notar que el orden de aplicaci贸n de los operadores puede influir en el resultado, por lo que es importante tener muy claro su prioridad de aplicaci贸n. De mayor a menor prioridad, el primer ser铆a not, seguido de and y or.

Para saber m谩s: Puedes leer la especificaci贸n oficial si quieres saber el orden de aplicaci贸n de todos los operadores en este enlace

Pero, imaginemos que no sabemos el orden de aplicaci贸n de los operadores. Vamos a intentar con ingenier铆a inversa descubrirlo con unos cuantos ejemplos. En el ejemplo que se muestra a continuaci贸n, habr铆a dos posibilidades. La primera ser铆a (False and False) or True cuyo resultado ser铆a True y la segunda False and (False or True) cuyo resultado ser铆a False. Dado que el resultado que Python da es True, podemos concluir que el equivalente es la primera opci贸n, es decir que and tiene prioridad sobre el or

print(False and False or True)
# True

Lo mismo con el siguiente ejemplo. Como ya sabemos de antes que and es evaluado primero, la siguiente expresi贸n ser铆a en realidad equivalente a True or (False and False) por lo que su resultado es True

print(True or False and False)
# True

Como ya hemos indicado anteriormente, se puede usar 0 y 1 para representar False y True respectivamente. Veamos a usar esa representaci贸n para abreviar. Podemos simplificar la siguiente expresi贸n, ya que el not es el operador que primer se aplica. Por lo tanto nos quedar铆a 0 and 0 or 1 and 1 or 1 and 0. Y como ya sabemos, despu茅s se aplica el and, por lo que nos quedar铆a (0 and 0) or (1 and 1) or (1 and 0). Y ya nos quedar铆a s贸lo aplicar el or de la expresi贸n resultante 0 or 1 or 1, por lo que el resultando final es 1 o True. Date cuenta que la expresi贸n se podr铆a simplificar, y una vez en un or nos encontramos que un lado es True, podr铆amos dejar de calcular el resto de la expresi贸n ya que el resultado ya ser铆a True

print(0 and not 1 or 1 and not 0 or 1 and 0)
# True