3.1 Estructuras Condicionales
De no ser por las estructuras de control, un programa en Python se ejecutaría de manera lineal, instrucción tras instrucción, hasta finalizar. Sin embargo, muchas veces queremos que el programa tome decisiones según ciertas condiciones: que ejecute un bloque de código si ocurre algo, y otro bloque diferente si no ocurre.
Aquí es donde entran en juego las estructuras condicionales, que permiten al programa ramificarse en diferentes caminos.
En Python existen dos grandes enfoques:
-
Condicional clásico:
if/elif/else- Adecuado para comprobaciones lógicas simples o encadenadas.
- Ejemplo: comprobar si un número es positivo, negativo o cero.
-
Emparejamiento estructural:
match/case(desde Python 3.10)- Inspirado en el pattern matching o Switch de otros lenguajes.
- Potente para manejar múltiples alternativas, valores complejos y patrones de datos estructurados.
- Ejemplo: analizar un error y decidir la acción.
1️⃣ Condicional clásico: if / elif / else
🟩 Uso del if
El condicional más básico es el if. Nos permite controlar si un bloque de código se ejecutará o no mediante una condición.
if condicion:
# bloque de codigo que se ejecuta si la condicion es verdadera

Supongamos que queremos dividir dos valores a y b. Antes de realizar la operación a/b debemos asegurarnos de que b no sea cero, ya que la división por cero no está definida.
a = 4
b = 2
if b != 0:
print(a/b)
- La condición es
b != 0. - El bloque indentado debajo del
ifsolo se ejecutará si la condición es verdadera.
Algo muy importante en Python es la indentación: el bloque de código debe ir tabulado, de lo contrario se producirá un error.
if b != 0:
c = a/b
d = c + 1
print(d) # Todo esto está dentro del bloque if
print("Fin del programa") # Esto está fuera, se ejecuta siempre
🟦 Uso de else
Muchas veces queremos no solo ejecutar un bloque si se cumple una condición, sino también ejecutar otro distinto si no se cumple. Para ello se usa la cláusula else.
if condicion:
# bloque si se cumple la condición
else:
# bloque si no se cumple la condición

x = 5
if x == 5:
print("Es 5")
else:
print("No es 5")
Aquí, el programa elegirá uno de los dos caminos posibles, nunca ambos.
🟨 Uso de elif
En algunos casos no hay solo dos alternativas, sino varias. Python permite añadir tantas condiciones como queramos mediante elif.
if condicion1:
# bloque si condicion1 es verdadera
elif condicion2:
# bloque si condicion2 es verdadera
elif condicion_n:
# bloque si condicion_n es verdadera
else:
# bloque si ninguna condicion anterior se cumple

x = 7
if x == 5:
print("Es 5")
elif x == 6:
print("Es 6")
elif x == 7:
print("Es 7")
else:
print("Es otro número")
El programa evaluará las condiciones en orden, y ejecutará solo el bloque de la primera que sea verdadera.
🟧 Operador ternario
Cuando queremos escribir un if/else en una sola línea, Python ofrece el operador ternario, también conocido como expresión condicional.
x = 5
print("Es 5" if x == 5 else "No es 5")
Esto es equivalente a:
if x == 5:
print("Es 5")
else:
print("No es 5")
El ternario también es útil para asignar valores de forma compacta:
a = 10
b = 5
c = a/b if b != 0 else -1
print(c) # 2
2️⃣ Patern Matching: match / case
🟩 Uso de match/case
En otros lenguajes de programación existe la sentencia switch para manejar múltiples alternativas de manera más legible que con elif. Python no tenía algo parecido hasta la versión 3.10, donde se introdujo el emparejamiento estructural con match/case.
match expresion:
case patron1:
# bloque de codigo si expresion coincide con patron1
case patron2:
# bloque de codigo si expresion coincide con patron2
case patron3 if condicion:
# bloque de codigo si expresion coincide con patron3 y ademas cumple la condicion
case _:
# bloque de codigo por defecto (comodin)

opcion = input("Elige opción: ")
match opcion:
case "a":
print("Opción A")
case "b":
print("Opción B")
case "c":
print("Opción C")
case _:
print("Opción no válida")
El case _ funciona como un comodín, que se ejecuta si ninguna de las opciones anteriores coincide.
En un mismo case se pueden poner varias opciones separadas por |.
codigo = 404
match codigo:
case 200:
print("OK")
case 400 | 404:
print("Error del cliente")
case 500 | 502 | 503:
print("Error del servidor")
case _:
print("Código desconocido")
🟦 Uso de guards (if)
Dentro de un case podemos añadir condiciones adicionales con if.
edad = 20
match edad:
case n if n < 18:
print("Menor de edad")
case n if 18 <= n < 65:
print("Adulto")
case _:
print("Jubilado")
Esto hace que el patrón sea todavía más flexible.
🟨 match con estructuras de datos
match también puede emplearse con estructuras de datos más complejas como listas, tuplas, etc... aunque esto lo veremos más adelante.
coordenada = (0, 1)
match coordenada:
case (0, 0):
print("Coordenada en origen")
case (x, 0):
print(f"Coordenada en eje x: {x}")
case (0, y):
print(f"Coordenada en eje y: {y}")
case (x, y):
print(f"Coordenada en: {x}, {y}")
case _:
print("Error")
✅ Buenas prácticas
- Usa
if/elif/elsepara condiciones sencillas y claras. - Usa
match/casecuando tengas muchas alternativas o quieras trabajar con estructuras de datos. - Siempre incluye un
else(o uncase _) para cubrir el caso por defecto. - Mantén las condiciones simples; si se vuelven demasiado complejas, divídelas en pasos previos con variables auxiliares.
- Documenta bien los patrones en
match/casecuando no sean obvios.