Saltar al contenido
🐍 Curso de Python
/

Módulo 1 · Lección 11 de 59

else y elif

Cómo dar una alternativa cuando la condición no se cumple y cómo encadenar varios casos excluyentes en orden.

⏱ 11 min de lectura

Con un if solo puedes hacer algo o no hacer nada. Casi siempre querrás lo otro: hacer una cosa cuando se cumple la condición y otra distinta cuando no. Y muchas veces no hay dos casos, sino cuatro o cinco: un intervalo de notas, un tramo de edad, un nivel de precio.

else: el caso contrario#

python
edad = 15

if edad >= 18:
        print("Puedes entrar.")
else:
        print("Lo siento, solo mayores de edad.")
Salida en pantalla
Lo siento, solo mayores de edad.

else va al mismo nivel de sangría que su if, lleva sus propios dos puntos y no lleva condición: su condición es "todo lo que no haya entrado en el if". Se ejecuta uno de los dos bloques, nunca los dos y nunca ninguno.

python
numero = 7

if numero % 2 == 0:
        print(f"{numero} es par")
else:
        print(f"{numero} es impar")
Salida en pantalla
7 es impar

elif: varias alternativas#

elif es la contracción de else if, y sirve para encadenar tantos casos como necesites:

python
nota = 6.5

if nota >= 9:
        calificacion = "sobresaliente"
elif nota >= 7:
        calificacion = "notable"
elif nota >= 6:
        calificacion = "bien"
elif nota >= 5:
        calificacion = "suficiente"
else:
        calificacion = "insuficiente"

print(f"Nota {nota}: {calificacion}")
Salida en pantalla
Nota 6.5: bien

La estructura tiene reglas fáciles de recordar:

ParteCuántas puede haberLleva condición
ifExactamente una, y va primeroSí
elifTantas como quierasSí
elseComo máximo una, y va últimaNo

Gana la primera que se cumple#

Esto es lo más importante de la lección. Python evalúa las condiciones de arriba abajo y se detiene en la primera verdadera: ejecuta su bloque y salta el resto de la cadena sin ni siquiera mirarla.

Eso hace que el orden sea parte de la lógica. Mira qué pasa si colocas los mismos casos de antes al revés:

python
nota = 9.5

if nota >= 5:
        calificacion = "suficiente"
elif nota >= 6:
        calificacion = "bien"
elif nota >= 7:
        calificacion = "notable"
elif nota >= 9:
        calificacion = "sobresaliente"
else:
        calificacion = "insuficiente"

print(f"Nota {nota}: {calificacion}")
Salida en pantalla
Nota 9.5: suficiente

Un 9.5 clasificado como suficiente. Y el programa no da ningún error: se ejecuta tan contento y da un resultado equivocado, que es el peor tipo de fallo. Lo que ocurre es que 9.5 >= 5 ya es verdadero, así que Python entra en el primer bloque y nunca llega a los elif de abajo.

Ese es el otro premio del orden correcto: en la versión buena, el elif nota >= 7 no necesita añadir "y menor que 9". Si el programa ha llegado a esa línea es porque la anterior era falsa, así que ya sabemos que la nota es menor que 9. La cadena arrastra ese conocimiento sola.

python
edad = 70

if edad < 3:
        grupo = "bebé"
elif edad < 13:
        grupo = "niño"
elif edad < 18:
        grupo = "adolescente"
elif edad < 67:
        grupo = "adulto"
else:
        grupo = "jubilado"

print(grupo)
Salida en pantalla
jubilado

else es opcional#

Si no hay nada que hacer en el caso contrario, no pongas else:

python
importe = 30.0
gastos_envio = 4.95

if importe > 50:
        gastos_envio = 0.0

print(f"Gastos de envío: {gastos_envio:.2f} €")
Salida en pantalla
Gastos de envío: 4.95 €

Este patrón, dar un valor por defecto antes y cambiarlo solo si hace falta, evita el NameError de la lección anterior y suele leerse mejor que un if/else en el que las dos ramas asignan a la misma variable.

Ejemplo completo#

Este programa retoma la calculadora de IMC del módulo y le añade la clasificación:

clasificador_imc.py
print("CLASIFICADOR DE IMC")
print("-" * 32)

peso = float(input("Peso en kilos: "))
altura = float(input("Altura en metros: "))

imc = peso / (altura ** 2)

if imc < 18.5:
        categoria = "peso insuficiente"
elif imc < 25:
        categoria = "peso normal"
elif imc < 30:
        categoria = "sobrepeso"
else:
        categoria = "obesidad"

print("-" * 32)
print(f"{'IMC:':<12}{imc:>6.1f}")
print(f"{'Categoría:':<12}{categoria}")
Salida en pantalla
CLASIFICADOR DE IMC
--------------------------------
Peso en kilos: 88
Altura en metros: 1.75
--------------------------------
IMC:          28.7
Categoría:  sobrepeso

Los umbrales van de menor a mayor y usan <, así que la cadena está bien ordenada: cada tramo se apoya en que los anteriores ya fallaron. Cambia los cuatro casos de sitio y comprueba tú mismo cómo se rompe.