If / Elif / Else
Ramifica tu código según condiciones, el fundamento de la toma de decisiones en Python.
- Escribir bloques if/elif/else para ramificar la lógica
- Usar operadores de comparación y booleanos en las condiciones
- Comprender los valores truthy y falsy en Python
- Escribir condiciones anidadas cuando sea necesario
De la condición a la decisión
La aritmética evalúa; la comparación decide; pero un programa que solo evalúa recorre una línea recta de arriba abajo. La vida no es una línea recta. Una nota es una función a trozos: su fórmula cambia en ciertos umbrales. En matemáticas escribes
El if/elif/else de Python es la transcripción de una fórmula a trozos. Cada pieza custodia su rango, y exactamente una pieza se dispara.
La horquilla simple
La rama más sencilla ejecuta su cuerpo solo cuando la condición es True:
score = 85
if score >= 60:
print("Passing!")La sentencia comienza con if, luego la condición, luego dos puntos, los dos puntos son lo que le dice a Python que viene un bloque. Todo lo indentado bajo ellos pertenece a esa rama y corre solo si la condición se cumplió.
La horquilla doble
else atrapa todo lo que el if no:
score = 45
if score >= 60:
print("Passing!")
else:
print("Needs more work")Una rama doble es una partición de los resultados: la condición divide el espacio de valores en dos mitades, y cada caso aterriza en exactamente una.
La horquilla múltiple: elif
Las fórmulas a trozos reales tienen más de dos piezas. elif, una contracción de “else if”, añade más condiciones, comprobadas en orden y deteniéndose en la primera que sea True:
score = 78
if score >= 90:
grade = "A"
elif score >= 80:
grade = "B"
elif score >= 70:
grade = "C"
else:
grade = "F"
print(grade) # BObserva la economía: cada condición elif solo necesita una cota inferior, porque los casos de arriba ya están decididos. Con , la primera pieza falla y la segunda acierta, las ramas posteriores nunca corren. Solo una rama puede dispararse, lo que la convierte en una función de verdad.
Verosimilitud: valores como condiciones
La condición tras if no tiene por qué ser una comparación. Python pregunta: “¿este valor es verdadero o falso?”, y la respuesta es uniforme:
# Todos estos son falsy — se comportan como False en una condición:
bool(0) # False
bool(0.0) # False
bool("") # False
bool([]) # False
bool(None) # False
# Todo lo demás es truthy — se comporta como True:
bool(1) # True
bool("hello") # True
bool([1, 2]) # TrueLa colección de valores falsy es deliberadamente pequeña: cero, texto vacío, contenedores vacíos y None. Todo lo demás cuenta. Eso compra condiciones concisas que se leen como una comprobación en lenguaje natural:
name = ""
if not name:
print("Name is empty")
items = [1, 2, 3]
if items:
print("We have items")Una cadena vacía es falsy, así que not name es True; una lista no vacía es truthy, así que if items dispara. Te ahorras el explícito == "" y != [], la comprobación es el vacío mismo.
Anidar: cuando una pregunta depende de otra
Algunas decisiones son secuenciales: primero, ¿eres mayor de edad?; luego, ¿llevas identificación? Eso anida:
age = 25
has_id = True
if age >= 21:
if has_id:
print("Entry allowed")
else:
print("Need ID")
else:
print("Too young")Anidar funciona, pero cada nivel duplica los caminos que el lector debe sostener en la cabeza. Las cadenas elif planas se leen como la propia fórmula a trozos; recurre a ellas primero y reserva el anidamiento para preguntas de verdad dependientes.
Un ejemplo resuelto: el termostato
Un termostato es una función por tramos con tres tramos. La cadena la transcribe directamente:
temperature = 22
if temperature <= 10:
state = "heating"
elif temperature >= 30:
state = "cooling"
else:
state = "steady"
print(state) # steadySe lee como la fórmula que es. El orden de los tramos importa: cada elif supone que los de arriba fallaron, así que dispara exactamente una rama y se imprime exactamente un estado.
Errores comunes
- Olvidar los dos puntos tras
if,elifoelse, sin ellos, el bloque nunca empieza. =en lugar de==.if score = 60es un error de sintaxis, a propósito.- Sobre-anidar cuando una cadena
elif(o un retorno temprano) expondría la forma de la fórmula de un solo vistazo. - Gana el primer
True, no la coincidencia más específica. Enif x > 5: ... elif x > 3: ..., unx = 4entra en la segunda rama solo porque la primera falló, y cualquier cosa menor a 3 cae alelse. Ordenar los tramos de estrecho a ancho mantiene correcta la fórmula.
🧩 Desafíos
🧩 Desafío, piensa primero, luego revela
Escribe classify_temp(temp) que devuelva "freezing" bajo , "cold" en , "warm" en y "hot" desde .
💡 Respuesta: Una cadena elif, aprovechando que cada comprobación posterior asume que las anteriores fallaron: if temp < 0: return "freezing" elif temp < 15: return "cold" elif temp < 30: return "warm" else: return "hot".
🧩 Desafío, piensa primero, luego revela
Con text = "Hello, World!", imprime "uppercase" si el texto está todo en mayúsculas, "lowercase" si todo en minúsculas, "mixed" de lo contrario.
💡 Respuesta: if text.isupper(): print("uppercase") elif text.islower(): print("lowercase") else: print("mixed"), el conjunto completo de condiciones forma una partición.
🤔 Preguntas socráticas
- ¿Por qué
elify noelse if? ¿Qué haría Python con las dos palabras apareciendo lado a lado? - Con , ¿cuántas condiciones evalúa la cadena de notas antes de entrar en una rama? (Pista: ¿qué pieza falla y cuál acierta?)
- ¿Cuál es la diferencia entre
if x:eif x is not None:? ¿Cuándo importa cada una?
✅ Comprobación rápida
1. ¿Qué imprime esto? x = 0; if x: print("yes") else: print("no")
2. ¿Qué condición se comprueba primero? if x > 5: ... elif x > 10: ... elif x > 3: ...