Tiza Las materias del CBC
Practicar →

Pensamiento Computacional (090) · Unidad 3 — Estructuras de control

Booleanos y comparaciones

Una comparación no devuelve un número: devuelve True o False. Con eso, y con and / or / not, se arma cualquier condición.

Practicar este tema →7 ejercicios que te corrigen paso a paso · gratis, sin cuenta

La explicación

Comparar da un booleano

==   igual a            5 == 5   → True
!=   distinto de       5 != 3   → True
>    mayor             5 > 3    → True
<    menor             5 < 3    → False
>=   mayor o igual     5 >= 5   → True
<=   menor o igual     5 <= 3   → False
Un igual guarda, dos iguales comparan. x = 5 le pone 5 a x; x == 5 pregunta si vale 5. Confundirlos es el error de sintaxis más común de la materia, y Python lo marca — pero recién en esa línea.

Los tres operadores lógicos

and   True sólo si las dos son True
or    True si al menos una es True
not   da vuelta el valor
edad >= 18 and tiene_dni     → las dos cosas
es_finde or es_feriado         → cualquiera de las dos
not llueve                       → True cuando no llueve

Encadenar comparaciones

Python permite escribir lo que uno escribiría en matemática, y significa exactamente eso:

3 < x < 10     equivale a   x > 3 and x < 10

Es de las pocas cosas donde Python se parece más a la matemática que otros lenguajes.

Qué cuenta como verdadero

Cualquier valor se puede usar como condición, y Python decide si es verdadero:

Falsos:   0   0.0   ""   []   {}   None
Verdaderos:  todo lo demás
Esta es la que sorprende en el parcial: bool("0") da True. El cero como número es falso, pero "0" es un string con un carácter adentro, y todo string no vacío es verdadero. Lo mismo con "False": es texto, y da True.

Cuidado al comparar tipos distintos

5 == 5.0     → True   (comparan por valor)
"10" == 10   → False  (un texto nunca es igual a un número)

El segundo caso vuelve a ser el problema de input(): si comparás lo que entró por teclado con un número sin convertirlo, siempre va a dar False.

Ejemplo resuelto

Escribir la condición para que alguien pueda votar: tiene que tener 16 años o más y estar empadronado.

Traducir la frase. "y" es and: tienen que cumplirse las dos.

def puede_votar(edad, empadronado):
    return edad >= 16 and empadronado

Por qué >= y no >. "16 años o más" incluye a los de 16. Con > dejarías afuera justo a los que cumplen el mínimo. Ese corrimiento de uno es de los errores que más cuestan, porque el programa anda bien para casi todos los casos y falla sólo en el borde.

Por qué empadronado va solo. Si ya es un booleano, escribir empadronado == True es redundante. La variable ya vale True o False.

Si además quisieras excluir a los mayores de 70 (voto optativo), hay que tener cuidado con cómo se combina:
return 16 <= edad <= 70 and empadronado
Encadenar las dos comparaciones de edad es más claro que edad >= 16 and edad <= 70 and empadronado, y se lee igual que en matemática.

El control que hay que hacer siempre con condiciones: probá los bordes. Con 15, 16, 70 y 71. Si funciona en los bordes, funciona en el medio; al revés no.

Dónde se cae la mayoría

Hasta acá la explicación. La práctica es la otra mitad: 7 ejercicios de este tema, en cuatro niveles, que no te dicen sólo si está bien al final sino que te corrigen en cada paso y te explican por qué. Además trae una animación que muestra la idea en movimiento.

Practicar Booleanos y comparaciones →

Ver todos los temas de Pensamiento Computacional