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.
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:
mayor_de_edad = True
tiene_carnet = False
print(mayor_de_edad)
print(tiene_carnet)
print(type(mayor_de_edad))True
False
<class 'bool'>Los seis operadores de comparación#
| Operador | Pregunta que hace | Ejemplo 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 |
edad = 20
print(edad == 20)
print(edad != 20)
print(edad > 18)
print(edad < 18)
print(edad >= 20)
print(edad <= 19)True
False
True
False
True
FalseEl ! 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:
nota = 7.5
aprobado = nota >= 5
print(aprobado)
print(f"{aprobado=}")True
aprobado=TrueDespué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.
temperatura = 21.5
print(f"{'Temperatura:':<16}{temperatura:.1f}")
print(f"{'¿Hace calor?:':<16}{temperatura > 25}")Temperatura: 21.5
¿Hace calor?: FalseComparar cadenas#
Con == y != se comparan textos carácter a carácter, y la comparación es exacta:
print("ana" == "ana")
print("Ana" == "ana")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:
respuesta = " SÍ "
print(respuesta.strip().lower() == "sí")TrueCon < y > las cadenas se ordenan alfabéticamente, que es cómodo para listados:
print("ana" < "berta")TrueEncadenar comparaciones#
Para saber si un número está dentro de un intervalo, Python permite escribirlo como en matemáticas:
edad = 34
print(18 <= edad < 65)TrueSe 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.
nota = 15
print(0 <= nota <= 10)False== no es lo mismo que is#
Los dos parecen preguntar por igualdad, pero no preguntan lo mismo:
==compara valores: ¿contienen lo mismo?iscompara identidad: ¿son exactamente el mismo objeto guardado en la memoria?
parte = "mundo"
saludo_1 = "hola mundo"
saludo_2 = "hola " + parte
print(saludo_1 == saludo_2)
print(saludo_1 is saludo_2)True
FalseLas 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:
resultado = None
print(resultado is None)
print(resultado is not None)True
Falseis 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:
print(3 == 3.0)
print(True == 1)
print(False == 0)True
True
TrueTexto y número, en cambio, nunca son iguales, ni siquiera cuando lo parecen:
print("20" == 20)
print(int("20") == 20)False
TrueEs 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.