Python 3 – Sentencia IF

El if de Python se lee casi como una frase. Lo que conviene conocer no es la sintaxis, sino qué considera Python «verdadero», porque ahí está la mitad de los despistes.

if, elif y else

nota = 7

if nota >= 9:
    print("sobresaliente")
elif nota >= 7:
    print("notable")
elif nota >= 5:
    print("aprobado")
else:
    print("suspenso")
salidanotable

No hay llaves: lo que va dentro del if es lo que está sangrado. Los dos puntos al final de cada condición son obligatorios, y las condiciones se comprueban en orden hasta la primera que se cumple. Por eso el orden importa: si la primera fuera nota >= 5, un nueve entraría por ahí.

Cuidado con lo que dice el else

i = 5
if i < 5:
    print("i es menor que 5")
else:
    print("i es mayor que 5")
salidai es mayor que 5

Este ejemplo estaba en la versión anterior de esta página, y miente: con i = 5 dice que es mayor. El else recoge todo lo que no cumplió lo anterior, y eso incluye el caso igual. O el mensaje dice «mayor o igual», o hace falta un elif i == 5. Es un error tonto, y por eso mismo es de los más frecuentes.

Qué cuenta como falso

for valor in (0, "", [], None, "0", [0], 0.0):
    print(f"{valor!r:>6} -> {'verdadero' if valor else 'falso'}")
salida0 -> falso
    '' -> falso
    [] -> falso
  None -> falso
   '0' -> verdadero
   [0] -> verdadero
   0.0 -> falso

En un if no hace falta comparar con nada: Python acepta cualquier valor. Son falsos el cero, la cadena vacía, las colecciones vacías y None; todo lo demás es verdadero. Por eso if lista: es la forma normal de preguntar «¿tiene algo?». Y fíjate en las dos trampas: la cadena "0" y la lista [0] son verdaderas, porque no están vacías.

Comparaciones encadenadas

edad = 30
print(18 <= edad < 65)
salidaTrue

Como en matemáticas. Es lo mismo que 18 <= edad and edad < 65, pero se lee mejor, y la variable solo se evalúa una vez.

== no es is

lista = [1, 2, 3]
print(lista == [1, 2, 3], lista is [1, 2, 3])
salidaTrue False

== pregunta si valen lo mismo; is, si son el mismo objeto. Son dos listas iguales pero distintas. La regla: is solo para None (if x is None:), y == para todo lo demás.

Muchos casos: match

comando = "salir"

match comando:
    case "ayuda" | "?":
        print("mostrando ayuda")
    case "salir":
        print("hasta luego")
    case _:
        print("no te entiendo")
salidahasta luego

Desde Python 3.10, cuando una cadena de elif compara siempre la misma variable con valores fijos, match se lee mejor. La barra une varios valores en un mismo caso, y case _ es el «cualquier otra cosa». Puede hacer bastante más —desmontar listas y diccionarios—, pero para empezar basta con esto.

Más información en inglés: If statement in Python.

Todo el código se ejecutó con Python 3.14 en un contenedor limpio antes de publicar esta página; las salidas están copiadas de esa ejecución.