if, elif y else en Python
En esta lección
- if: ejecutar algo solo si se cumple una condición
- else: qué hacer si no se cumple
- elif: varias alternativas
- Combinar condiciones
- Valores truthy y falsy en un if
- Condicionales anidados
- Expresión condicional (operador ternario)
- pass: un bloque que no hace nada
- match: elegir entre muchos casos
- Ejemplo completo: precio de una entrada
- Errores frecuentes
- Resumen
Hasta ahora tus programas ejecutaban todas las líneas, una detrás de otra. Con los condicionales el programa puede tomar decisiones: hacer una cosa u otra según los datos. En esta lección verás if, elif y else, cómo escribir buenas condiciones, la versión en una línea y match, la forma moderna de elegir entre muchos casos.
if: ejecutar algo solo si se cumple una condición
temperatura = 30
if temperatura > 25:
print("Hace calor")
print("Lleva agua")
print("Buen día")
# Hace calor
# Lleva agua
# Buen día
Tres detalles propios de Python:
- La condición no necesita paréntesis.
- La línea termina en dos puntos
:. - Lo que va dentro del
ifse marca con sangría (4 espacios). La líneaprint("Buen día")no tiene sangría, así que se ejecuta siempre.
La condición es cualquier expresión que dé True o False, normalmente una comparación: ==, !=, >, <, >=, <=. Los tienes todos en Operadores.
else: qué hacer si no se cumple
edad = 16
if edad >= 18:
print("Puedes entrar")
else:
print("Lo siento, eres menor de edad")
# Lo siento, eres menor de edad
else no lleva condición: recoge todos los casos en los que el if es falso. Siempre se ejecuta uno de los dos bloques, nunca los dos.
elif: varias alternativas
elif es la forma corta de else if. Permite encadenar tantas condiciones como necesites:
nota = 7.5
if nota >= 9:
print("Sobresaliente")
elif nota >= 7:
print("Notable")
elif nota >= 5:
print("Aprobado")
else:
print("Suspenso")
# Notable
Las condiciones se comprueban en orden y solo se ejecuta el primer bloque que se cumpla. Por eso, en el ejemplo, un 7.5 no dice también “Aprobado”: aunque 7.5 >= 5 es cierto, Python ya había entrado en el bloque del notable.
Cuidado: el orden importa. Si pusieras primero
if nota >= 5, todas las notas aprobadas caerían ahí y nunca verías “Sobresaliente”. Ordena de la condición más estricta a la más amplia.
¿Por qué no usar varios if seguidos? Porque serían independientes: se comprobarían todos y podrían ejecutarse varios. elif deja claro que las opciones se excluyen entre sí.
Combinar condiciones
Con and, or y not unes varias comparaciones:
edad = 20
tiene_entrada = True
if edad >= 18 and tiene_entrada:
print("Puedes pasar")
# Puedes pasar
dia = "domingo"
if dia == "sábado" or dia == "domingo":
print("Fin de semana")
# Fin de semana
La segunda condición se escribe mejor con in, que comprueba si un valor está en una colección:
if dia in ("sábado", "domingo"):
print("Fin de semana")
Comparaciones encadenadas
Python permite encadenar comparaciones como en matemáticas, algo que muchos lenguajes no hacen:
edad = 40
if 18 <= edad <= 65:
print("Edad laboral")
# Edad laboral
Equivale a 18 <= edad and edad <= 65, pero se lee mucho mejor. Funciona con cualquier comparación: 0 < x < 10, a == b == c.
Valores truthy y falsy en un if
La condición de un if no tiene por qué ser un bool. Python convierte el valor a True o False automáticamente:
- Falsy (cuentan como falso):
False,0,0.0,"",[],(),{},set()yNone. - Truthy: todo lo demás.
Así se escriben comprobaciones muy compactas:
nombre = ""
if not nombre:
print("No has escrito tu nombre")
# No has escrito tu nombre
carrito = ["libro", "lápiz"]
if carrito:
print(f"Tienes {len(carrito)} productos")
# Tienes 2 productos
if carrito: significa “si el carrito no está vacío”. Es la forma habitual en Python, más clara que if len(carrito) > 0:.
Cuidado: si una variable puede valer
0oNoney los dos significan cosas distintas, no usesif not x. Por ejemplo, un descuento de0es válido, peroNoneindica que no hay dato. Ahí escribeif descuento is None:.
Condicionales anidados
Puedes meter un if dentro de otro. Cada nivel lleva 4 espacios más:
usuario = "admin"
clave = "1234"
if usuario == "admin":
if clave == "1234":
print("Bienvenido, administrador")
else:
print("Clave incorrecta")
else:
print("Usuario desconocido")
# Bienvenido, administrador
Anidar es útil cuando la segunda pregunta solo tiene sentido si la primera se cumple. Pero con tres o cuatro niveles el código se vuelve difícil de seguir. A menudo se puede aplanar con and o con elif:
if usuario != "admin":
print("Usuario desconocido")
elif clave != "1234":
print("Clave incorrecta")
else:
print("Bienvenido, administrador")
# Bienvenido, administrador
Expresión condicional (operador ternario)
Cuando solo necesitas elegir entre dos valores, hay una versión en una línea:
nota = 4
estado = "Aprobado" if nota >= 5 else "Suspenso"
print(estado)
# Suspenso
Se lee casi como una frase: “Aprobado si la nota es mayor o igual que 5; si no, Suspenso”. También se puede usar dentro de una f-string:
unidades = 1
print(f"Tienes {unidades} {'mensaje' if unidades == 1 else 'mensajes'}")
# Tienes 1 mensaje
Úsala solo para casos sencillos. Si necesitas ejecutar varias instrucciones o hay más de dos opciones, un if normal es más legible.
pass: un bloque que no hace nada
Python no permite bloques vacíos. Si todavía no sabes qué poner, o quieres dejar claro que en un caso no se hace nada, usa pass:
stock = 10
if stock > 0:
pass # TODO: gestionar la venta
else:
print("Sin stock")
Sin el pass, obtendrías un IndentationError.
match: elegir entre muchos casos
Desde Python 3.10 existe match, parecido al switch de otros lenguajes pero más potente. Compara un valor con varios patrones y ejecuta el primero que encaje:
opcion = "2"
match opcion:
case "1":
print("Ver saldo")
case "2":
print("Sacar dinero")
case "3":
print("Salir")
case _:
print("Opción no válida")
# Sacar dinero
case _es el caso por defecto: encaja con cualquier cosa. Va siempre el último.- A diferencia del
switchde Java o JavaScript, no hace faltabreak: solo se ejecuta un caso.
Varios valores en un mismo caso
Con | agrupas valores:
dia = "sábado"
match dia:
case "sábado" | "domingo":
print("Fin de semana")
case "viernes":
print("Casi fin de semana")
case _:
print("Día laborable")
# Fin de semana
Condiciones extra con if (guardas)
Un case puede capturar el valor en una variable y añadir una condición:
temperatura = 32
match temperatura:
case t if t < 0:
print("Hiela")
case t if t < 25:
print("Agradable")
case t:
print(f"Calor: {t} grados")
# Calor: 32 grados
Patrones con secuencias
match puede mirar dentro de una lista y separar sus partes. Muy útil para interpretar órdenes escritas por el usuario:
orden = "mover norte".split()
match orden:
case ["salir"]:
print("Hasta luego")
case ["mover", direccion]:
print(f"Te mueves hacia el {direccion}")
case _:
print("No entiendo la orden")
# Te mueves hacia el norte
El patrón ["mover", direccion] encaja con cualquier lista de dos elementos cuyo primer elemento sea "mover", y guarda el segundo en direccion.
Consejo: para comparar un valor con tres o cuatro opciones,
if/elifsigue siendo perfectamente válido.matchbrilla cuando hay muchos casos o cuando necesitas desmontar estructuras.
Ejemplo completo: precio de una entrada
edad = 70
es_estudiante = False
if edad < 4:
precio = 0
elif edad < 18 or es_estudiante:
precio = 5
elif edad >= 65:
precio = 4
else:
precio = 9
print(f"Precio: {precio} €")
# Precio: 4 €
Errores frecuentes
- Olvidar los dos puntos:
if edad > 18daSyntaxError: expected ':'. - Usar
=en lugar de==:if edad = 18:daSyntaxError.=asigna;==compara. - Sangría incorrecta: si el cuerpo no está sangrado,
IndentationError. Si unprintqueda mal alineado, puede ejecutarse fuera delifsin que te des cuenta. - Comparar con
orde forma incompleta:if dia == "sábado" or "domingo":es siempre verdadero, porque"domingo"es un texto no vacío (truthy). Escribeif dia in ("sábado", "domingo"):. - Comparar números con texto:
inputdevuelvestr, así queif edad >= 18conedad = input(...)daTypeError. Convierte conint(). else if: en Python eselif.else ifprovoca un error de sintaxis o de sangría.
Resumen
| Estructura | Uso |
|---|---|
if cond: | Ejecuta el bloque solo si se cumple |
else: | Alternativa cuando no se cumple |
elif cond: | Más alternativas; solo se ejecuta la primera verdadera |
a <= x <= b | Comparación encadenada |
if lista: | Truthy: “si no está vacía” |
x if cond else y | Elegir entre dos valores en una línea |
pass | Bloque vacío |
match / case | Muchos casos; | agrupa, _ por defecto, if como guarda |
En la siguiente lección aprenderás a repetir código con bucles.
Pon a prueba lo que has aprendido
¿Te ha quedado claro? Márcala y verás tu progreso en el explorador.