Saltar al contenido
🐍 Curso de Python
/

Módulo 1 · Lección 9 de 59

Booleanos y comparaciones

El tipo bool, los seis operadores de comparación y cómo se guarda el resultado de una comparación en una variable.

⏱ 10 min de lectura

Un programa útil tiene que decidir. Para decidir, antes hay que preguntar: ¿es esta edad mayor que 18? ¿coincide esta contraseña con la guardada? ¿queda saldo suficiente? Todas esas preguntas se responden con un sí o un no, y en Python ese sí y ese no tienen nombre propio: True y False.

Esta lección es la mitad del trabajo. Aquí aprendes a formular la pregunta; en la siguiente, a actuar según la respuesta.

El tipo bool#

Solo tiene dos valores posibles, y se escriben con la primera letra en mayúscula:

python
mayor_de_edad = True
tiene_carnet = False

print(mayor_de_edad)
print(tiene_carnet)
print(type(mayor_de_edad))
Salida en pantalla
True
False
<class 'bool'>

Los seis operadores de comparación#

OperadorPregunta que haceEjemplo verdadero
==¿Son iguales?3 == 3
!=¿Son distintos?3 != 4
>¿Es mayor?5 > 2
<¿Es menor?2 < 5
>=¿Es mayor o igual?5 >= 5
<=¿Es menor o igual?5 <= 5
python
edad = 20

print(edad == 20)
print(edad != 20)
print(edad > 18)
print(edad < 18)
print(edad >= 20)
print(edad <= 19)
Salida en pantalla
True
False
True
False
True
False

El ! de != se lee como una negación: "no igual". Y fíjate en que >= y <= se escriben siempre en ese orden, primero el signo de desigualdad y después el igual. => no existe.

Una comparación es una expresión#

Esto es lo importante de hoy. Una comparación no es una pregunta que hagas a Python: es una expresión que se calcula y produce un valor, igual que 2 + 3 produce 5. Y como produce un valor, se puede guardar en una variable:

python
nota = 7.5
aprobado = nota >= 5

print(aprobado)
print(f"{aprobado=}")
Salida en pantalla
True
aprobado=True

Después de esas dos líneas, aprobado es una variable de tipo bool como cualquier otra. Puedes imprimirla, pasarla por ahí y usarla para decidir. Nombrar así las comparaciones hace el código mucho más legible: if aprobado: se entiende de un vistazo, mejor que repetir if nota >= 5: en cinco sitios distintos.

python
temperatura = 21.5

print(f"{'Temperatura:':<16}{temperatura:.1f}")
print(f"{'¿Hace calor?:':<16}{temperatura > 25}")
Salida en pantalla
Temperatura:    21.5
¿Hace calor?:   False

Comparar cadenas#

Con == y != se comparan textos carácter a carácter, y la comparación es exacta:

python
print("ana" == "ana")
print("Ana" == "ana")
Salida en pantalla
True
False

"Ana" y "ana" son cadenas distintas para Python. Cuando compares algo que ha escrito una persona, normaliza antes con los métodos que ya conoces:

python
respuesta = "  SÍ  "
print(respuesta.strip().lower() == "sí")
Salida en pantalla
True

Con < y > las cadenas se ordenan alfabéticamente, que es cómodo para listados:

python
print("ana" < "berta")
Salida en pantalla
True

Encadenar comparaciones#

Para saber si un número está dentro de un intervalo, Python permite escribirlo como en matemáticas:

python
edad = 34
print(18 <= edad < 65)
Salida en pantalla
True

Se lee tal cual: "18 es menor o igual que la edad, y la edad es menor que 65". Es una de las cosas que más se echan de menos al volver a otros lenguajes, donde hay que escribir las dos comparaciones por separado y unirlas.

python
nota = 15
print(0 <= nota <= 10)
Salida en pantalla
False

== no es lo mismo que is#

Los dos parecen preguntar por igualdad, pero no preguntan lo mismo:

  • == compara valores: ¿contienen lo mismo?
  • is compara identidad: ¿son exactamente el mismo objeto guardado en la memoria?
python
parte = "mundo"
saludo_1 = "hola mundo"
saludo_2 = "hola " + parte

print(saludo_1 == saludo_2)
print(saludo_1 is saludo_2)
Salida en pantalla
True
False

Las dos variables contienen el mismo texto, así que == da True. Pero son dos cadenas distintas construidas en momentos distintos, así que para is no son el mismo objeto.

La regla práctica es corta: usa siempre ==. La única excepción habitual es comparar con None, donde la costumbre de Python es usar is:

python
resultado = None

print(resultado is None)
print(resultado is not None)
Salida en pantalla
True
False

is not es la negación de is, y se escribe así, con las dos palabras separadas.

Comparaciones entre tipos distintos#

Los números se comparan entre sí aunque sean de tipos diferentes, y los booleanos cuentan como 1 y 0:

python
print(3 == 3.0)
print(True == 1)
print(False == 0)
Salida en pantalla
True
True
True

Texto y número, en cambio, nunca son iguales, ni siquiera cuando lo parecen:

python
print("20" == 20)
print(int("20") == 20)
Salida en pantalla
False
True

Es la misma frontera de la lección anterior: "20" es una cadena y 20 es un entero, y Python no cruza esa frontera por su cuenta. Con == no hay error, solo un False; con < o > sí lo hay.