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.
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#
edad = 15
if edad >= 18:
print("Puedes entrar.")
else:
print("Lo siento, solo mayores de edad.")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.
numero = 7
if numero % 2 == 0:
print(f"{numero} es par")
else:
print(f"{numero} es impar")7 es imparelif: varias alternativas#
elif es la contracción de else if, y sirve para encadenar tantos casos como necesites:
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}")Nota 6.5: bienLa estructura tiene reglas fáciles de recordar:
| Parte | Cuántas puede haber | Lleva condición |
|---|---|---|
if | Exactamente una, y va primero | Sí |
elif | Tantas como quieras | Sí |
else | Como máximo una, y va última | No |
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:
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}")Nota 9.5: suficienteUn 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.
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)jubiladoelse es opcional#
Si no hay nada que hacer en el caso contrario, no pongas else:
importe = 30.0
gastos_envio = 4.95
if importe > 50:
gastos_envio = 0.0
print(f"Gastos de envío: {gastos_envio:.2f} €")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:
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}")CLASIFICADOR DE IMC
--------------------------------
Peso en kilos: 88
Altura en metros: 1.75
--------------------------------
IMC: 28.7
Categoría: sobrepesoLos 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.