Saltar al contenido
Editor

Booleanos, comparaciones y operadores en Python explicados

Principiante25 min6 ejercicios90 XP

Esta lección es una traducción del original en inglés.Read in EnglishAvisar de un error de traducción

0/6 ejercicios

Cada día tomas decisiones de sí o no: "¿Está lloviendo?", "¿Tengo suficiente dinero?", "¿Mi contraseña es correcta?". Las computadoras toman el mismo tipo de decisiones, y para eso usan booleanos.

Un booleano es un valor que solo puede ser True o False. Nada más: dos opciones. Piensa en un interruptor de luz: encendido o apagado, sí o no, verdadero o falso.

En este tutorial aprenderás cómo compara valores Python, cómo combina condiciones y cómo decide qué cuenta como "verdadero" o "falso". Estas habilidades son la base de cada instrucción if y de cada bucle que vayas a escribir.

¿Qué son los booleanos en Python?

Python tiene un tipo de dato integrado llamado bool. Tiene exactamente dos valores posibles: True y False. Fíjate en la T y la F mayúsculas: importan.

Crear variables booleanas
is_raining = True
has_umbrella = False
print(is_raining) # True
print(has_umbrella) # False
print(type(is_raining)) # <class 'bool'>
Salida
True
False
<class 'bool'>

Las variables booleanas suelen empezar por is_, has_ o can_ para que el código se lea como inglés sencillo. Por ejemplo, is_logged_in (ha iniciado sesión) o has_permission (tiene permiso) te dicen exactamente qué significa la variable.


Cómo comparar valores en Python

La mayoría de los booleanos no salen de escribir True o False a mano. Salen de comparaciones. Cuando comparas dos valores, Python te devuelve un booleano.

Piensa en los operadores de comparación como en el juez de un concurso de talentos. Le das dos cosas y te responde "True" o "False".

Los seis operadores de comparación
# Equal to
print(5 == 5) # True
print(5 == 3) # False
# Not equal to
print(5 != 3) # True
print(5 != 5) # False
# Greater than / Less than
print(10 > 5) # True
print(3 < 1) # False
# Greater or equal / Less or equal
print(5 >= 5) # True
print(3 <= 7) # True
Salida
True
False
True
False
True
False
True
True

Puedes guardar el resultado de una comparación en una variable. Es útil cuando quieres comprobar una condición una sola vez y usar el resultado varias veces.

Guardar resultados de comparaciones
age = 20
min_age = 18
is_adult = age >= min_age
print(is_adult) # True
temperature = 35
is_hot = temperature > 30
print(is_hot) # True
Salida
True
True

Cómo comparar cadenas en Python

También puedes comparar cadenas. Python las revisa carácter por carácter siguiendo el orden alfabético (técnicamente, el orden Unicode). Las letras mayúsculas van antes que las minúsculas.

Comparar cadenas
# Equality checks
print("hello" == "hello") # True
print("hello" == "Hello") # False (case matters!)
# Alphabetical ordering
print("apple" < "banana") # True (a comes before b)
print("cat" > "car") # True (t comes after r)
# Case-insensitive comparison
name = "Alice"
print(name.lower() == "alice") # True
Salida
True
False
True
True
True

Cómo usar los operadores lógicos: and, or, not

A veces una comparación no basta. Puede que necesites comprobar si alguien tiene edad suficiente y además tiene entrada. O si es sábado o domingo. Python te ofrece tres operadores lógicos para combinar condiciones.

El operador "and"

El operador and devuelve True solo cuando los dos lados son verdaderos. Piensa en una puerta con dos cerraduras: necesitas las dos llaves para abrirla.

Usar "and"
age = 20
has_ticket = True
# Both must be True
print(age >= 18 and has_ticket) # True
print(age >= 18 and not has_ticket) # False (one is False)
# Real-world example: login check
username_ok = True
password_ok = True
print(username_ok and password_ok) # True - access granted!
Salida
True
False
True

El operador "or"

El operador or devuelve True cuando al menos uno de los lados es verdadero. Piensa en una puerta con dos timbres: toques el que toques, alguien vendrá a abrir.

Usar "or"
is_weekend = True
is_holiday = False
# At least one must be True
print(is_weekend or is_holiday) # True
print(False or False) # False (neither is True)
# Real-world example: discount eligibility
is_student = False
is_senior = True
gets_discount = is_student or is_senior
print(gets_discount) # True
Salida
True
False
True

El operador "not"

El operador not cambia un booleano por su opuesto. True pasa a ser False, y False pasa a ser True. Es como accionar un interruptor de luz.

Usar "not"
is_raining = True
print(not is_raining) # False
print(not False) # True
# Useful for "if not" conditions
is_logged_in = False
print(not is_logged_in) # True - means "user is NOT logged in"
Salida
False
True
True

¿Qué es la evaluación de cortocircuito en Python?

Python es perezoso, pero de forma inteligente. Al evaluar and u or, se detiene en cuanto sabe la respuesta. Esto se llama evaluación de cortocircuito (short-circuit evaluation).

Con and, si el primer valor es False, Python ni se molesta en revisar el segundo: el resultado ya es False. Con or, si el primer valor es True, se salta el segundo: el resultado ya es True.

La evaluación de cortocircuito en acción
# "and" short-circuits on False
print(False and print("This won't run")) # False
# "or" short-circuits on True
print(True or print("This won't run")) # True
# Practical use: safe division
x = 0
# Without short-circuit, this would crash!
result = x != 0 and 10 / x > 2
print(result) # False (never tries 10 / 0)
Salida
False
True
False

¿Qué son los valores truthy y falsy en Python?

Un dato sorprendente: en Python, todo valor tiene un "valor de verdad". No solo cuentan True y False: cualquier valor se puede tratar como verdadero o como falso.

Piénsalo así: ¿tu billetera está vacía o tiene algo dentro? Las cosas vacías son "falsy" (cuentan como falsas). Las cosas con contenido son "truthy" (cuentan como verdaderas).

Valores falsy frente a truthy
# Falsy values - these all count as False
print(bool(0)) # False (zero)
print(bool(0.0)) # False (zero float)
print(bool("")) # False (empty string)
print(bool([])) # False (empty list)
print(bool({})) # False (empty dict)
print(bool(None)) # False (None)
# Truthy values - these all count as True
print(bool(1)) # True (any non-zero number)
print(bool(-5)) # True (negative numbers too!)
print(bool("hello")) # True (non-empty string)
print(bool([1, 2])) # True (non-empty list)
Salida
False
False
False
False
False
False
True
True
True
True

Cómo usar la función bool()

La función bool() convierte cualquier valor en su equivalente booleano. Te dice si Python considera que un valor es truthy o falsy.

Usar bool() para comprobar valores
# Converting various values to booleans
print(bool(42)) # True
print(bool(0)) # False
print(bool("Python")) # True
print(bool("")) # False
print(bool(None)) # False
# Useful for checking if something "exists"
user_input = ""
if bool(user_input):
print("Got input!")
else:
print("No input provided") # This runs
Salida
True
False
True
False
False
No input provided

En la práctica, rara vez necesitas llamar a bool() directamente. Python comprueba el valor de verdad automáticamente en las instrucciones if. Escribir if name: es lo mismo que if bool(name):, pero más corto.

Largo (innecesario)
name = "Alice"
if bool(name) == True:
    print("Name is set")
Al estilo Python (limpio)
name = "Alice"
if name:
    print("Name is set")

Cómo usar comparaciones encadenadas en Python

Python tiene un truco ingenioso que la mayoría de los lenguajes no tienen: puedes encadenar comparaciones, igual que en matemáticas. En lugar de escribir x > 1 and x < 10, puedes escribir 1 < x < 10.

Comparaciones encadenadas
age = 25
# Chained comparison (Pythonic)
print(18 <= age <= 65) # True - working age
# Same thing without chaining (longer)
print(age >= 18 and age <= 65) # True
# You can chain more than two
x = 5
print(1 < x < 10 < 100) # True - all comparisons pass
Salida
True
True
True

Las comparaciones encadenadas se leen igual que la notación matemática. Son más cortas y se entienden de un vistazo. Úsalas siempre que compruebes si un valor está dentro de un rango.


Errores comunes con booleanos en Python

Error 1: usar = en lugar de ==

Este es el error con booleanos más común entre quienes empiezan. Un solo = sirve para asignar (darle un valor a una variable). Un == doble sirve para comparar (comprobar si dos valores son iguales).

Error: asignación en lugar de comparación
score = 100
# This assigns 50 to score, not a comparison!
# if score = 50:  # SyntaxError!
#     print("You got 50")
Solución: usa == para comparar
score = 100
if score == 50:
    print("You got 50")
else:
    print("Not 50")

Error 2: comparar tipos distintos

Comparar una cadena con un número puede dar resultados sorprendentes. La cadena "5" no es igual al número 5. Son de tipos distintos.

Comparar tipos distintos
# String vs number - not equal!
print("5" == 5) # False
print("5" != 5) # True
# Convert first, then compare
user_input = "5"
print(int(user_input) == 5) # True
# Be careful with True/False and numbers
print(True == 1) # True (!) - True is actually 1
print(False == 0) # True (!) - False is actually 0
Salida
False
True
True
True
True

Ejercicios de práctica

Comprueba si un número está en un rango
Escribe el código

Crea una variable num con el valor 42. Usa una comparación encadenada para comprobar si num está entre 1 y 100 (ambos incluidos). Imprime el resultado.

Salida esperada:

True
# Create num and check if it's between 1 and 100 (inclusive)
Valida la longitud de una cadena
Escribe el código

Crea una variable word con el valor "Python". Comprueba si la cadena no está vacía Y tiene más de 3 caracteres. Imprime el resultado.

Salida esperada:

True
# Create word and check if it's non-empty AND longer than 3 characters
Predice el resultado de las operaciones lógicas
Predice la salida

Sin ejecutar el código, predice qué imprimirá cada línea. Después, ejecútalo para comprobar tus respuestas.

El código imprime los resultados de tres operaciones lógicas.

print(True and False)
print(True or False)
print(not True)
Corrige el error de comparación
Corrige el error

El código de abajo debería comprobar si status es igual a "active" e imprimir el resultado. Pero tiene un error. Encuéntralo y corrígelo.

Salida esperada:

True
status = "active"
result = status = "active"
print(result)
Comprueba si un año es bisiesto
Escribe el código

Crea una variable year con el valor 2024. Un año es bisiesto si:

  • Es divisible entre 4
  • Pero no es divisible entre 100
  • Salvo que también sea divisible entre 400
  • Usa el operador módulo % y operadores lógicos para comprobarlo. Imprime el resultado.

    Salida esperada:

    True
    # Check if 2024 is a leap year
    Evalúa el valor de verdad con bool()
    Escribe el código

    Usa la función bool() para imprimir el valor de verdad de estos valores, cada uno en su propia línea y exactamente en este orden:

    1. 0

    2. "hello"

    3. ""

    4. 42

    5. None

    Salida esperada:

    False
    True
    False
    True
    False
    # Print the truthiness of each value using bool()

    Tutoriales relacionados

    ¿Te sirvió este tutorial?

    Sugerir una mejora