Python: match y case, otra forma de tomar decisiones
Hasta ahora hemos hecho que Python tome decisiones con if, elif y else.
Ese mecanismo sigue siendo fundamental. Pero hay situaciones en las que el programa no necesita comprobar expresiones diferentes, sino responder de una forma u otra según el valor que contiene una misma variable.
Por ejemplo:
- si el modo vale
1, arrancar en modo manual; - si vale
2, arrancar en modo automático; - si vale
3, entrar en mantenimiento; - para cualquier otro valor, avisar de que la opción no existe.
Podemos resolverlo con if / elif / else. Desde Python 3.10 también disponemos de otra estructura pensada precisamente para organizar este tipo de decisiones: match / case.
matchno sustituye aif. Resuelve de forma especialmente clara otro tipo de problema: elegir qué hacer según aquello que coincide con un valor o patrón.
1. De if / elif / else a match
Supongamos que un dispositivo puede trabajar en tres modos:
modo = 2
if modo == 1:
print("Modo manual")
elif modo == 2:
print("Modo automático")
elif modo == 3:
print("Modo mantenimiento")
else:
print("Modo desconocido")
El código es correcto. Python evalúa las condiciones de arriba abajo y ejecuta la primera que sea verdadera.
Pero observa qué estamos haciendo realmente: siempre comparamos la misma variable, modo, con distintos valores posibles.
En Python 3.10 o posterior podemos expresar esa misma decisión así:
modo = 2
match modo:
case 1:
print("Modo manual")
case 2:
print("Modo automático")
case 3:
print("Modo mantenimiento")
case _:
print("Modo desconocido")
El resultado es:
Modo automático
Las dos versiones solucionan el mismo problema, pero la segunda hace visible de inmediato la idea que hay detrás:
tomar un valor y buscar qué caso coincide con él.

2. La estructura básica
La forma general es:
match variable:
case valor1:
instrucciones
case valor2:
instrucciones
case valor3:
instrucciones
case _:
instrucciones
Hay dos palabras clave nuevas:
match: indica qué valor queremos analizar;case: define cada una de las posibilidades con las que queremos intentar hacerlo coincidir.
El guion bajo _ tiene un papel especial. Lo veremos enseguida.
Ejemplo
estado = "alarma"
match estado:
case "normal":
print("Sistema funcionando correctamente")
case "alarma":
print("ATENCIÓN: alarma activa")
case "mantenimiento":
print("Sistema detenido por mantenimiento")
case _:
print("Estado desconocido")
Python toma el contenido de estado y comprueba los case en orden.
Como "alarma" coincide con el segundo caso, ejecuta:
ATENCIÓN: alarma activa

3. case _: cualquier otro caso
En una estructura if / elif / else, else recoge todo aquello que no ha cumplido ninguna condición anterior.
En match, esa función puede realizarla:
case _:
El _ actúa como comodín: coincide con cualquier valor que no haya sido capturado antes.
codigo = 7
match codigo:
case 1:
print("Arranque")
case 2:
print("Funcionamiento")
case 3:
print("Parada")
case _:
print("Código no reconocido")
Como 7 no coincide con 1, 2 ni 3, se ejecuta:
Código no reconocido
Podemos pensar en case _ como:
«si no ha coincidido nada de lo anterior, entra aquí».
No es obligatorio escribirlo. Si ningún caso coincide y no existe case _, el bloque match simplemente termina sin ejecutar ninguno de sus case.

4. Python se queda con la primera coincidencia
Hay una idea que ya conoces de if / elif / else y que vuelve a ser importante aquí:
el orden importa.
Python recorre los casos de arriba abajo. Cuando encuentra el primero que coincide, ejecuta su bloque y termina el match.
No continúa buscando otro case.
En el nivel básico que estamos estudiando ahora, esto hace que la lectura sea sencilla:
valor
↓
case A ¿coincide?
↓ no
case B ¿coincide?
↓ no
case C ¿coincide?
↓ no
case _ cualquier otro
En
match, encontrar una coincidencia significa dejar de buscar.
5. Un ejemplo con input()
Podemos usar match con valores introducidos por el usuario.
Imagina el selector de funcionamiento de un pequeño robot:
opcion = int(input("Selecciona modo (1-3): "))
match opcion:
case 1:
print("Control manual")
case 2:
print("Navegación automática")
case 3:
print("Diagnóstico")
case _:
print("Opción no válida")
Si el usuario introduce:
2
el programa muestra:
Navegación automática
Aquí conviene observar algo que no ha cambiado por utilizar match: input() devuelve texto.
Por eso hemos utilizado:
int(input(...))
para convertir la entrada a un número entero antes de compararla con los casos 1, 2 y 3.
Si no hiciéramos esa conversión, "2" y 2 no serían el mismo valor.
6. ¿Cuándo usar match y cuándo if?
match no llega para jubilar a if.
Las dos estructuras pueden tomar decisiones, pero no expresan igual de bien todos los problemas.
match resulta especialmente claro cuando…
Tenemos una misma variable y queremos actuar según varios valores concretos:
match comando:
case "start":
...
case "stop":
...
case "reset":
...
case _:
...
La pregunta mental es:
«¿Con cuál de estos casos coincide este valor?»
if resulta más natural cuando…
Queremos comprobar condiciones, límites, rangos o relaciones:
if temperatura > 70:
print("Temperatura crítica")
elif temperatura > 50:
print("Temperatura elevada")
else:
print("Temperatura normal")
Aquí no estamos preguntando si temperatura es exactamente un valor concreto.
Estamos evaluando expresiones:
temperatura > 70
temperatura > 50
La pregunta mental es:
«¿Es verdadera esta condición?»
Una regla práctica
| Si necesitas… | Suele resultar más natural |
|---|---|
| comprobar rangos o desigualdades | if / elif / else |
combinar condiciones con and, or, not | if / elif / else |
| responder a varios valores concretos de una misma variable | match / case |
| disponer de un caso para cualquier otro valor | else o case _ |
No es una prohibición. Es una forma de elegir la estructura que haga que el programa se entienda mejor.

7. match no es simplemente el switch de otros lenguajes
Lenguajes como C, Java o JavaScript utilizan tradicionalmente una estructura denominada switch para seleccionar entre varios casos.
Durante mucho tiempo Python no tuvo una sentencia switch equivalente y este tipo de decisiones se resolvía habitualmente con if / elif / else.
Desde Python 3.10 existe match / case.
A primera vista puede parecer simplemente «el switch de Python»:
match opcion:
case 1:
...
case 2:
...
Pero esa comparación se queda corta.
match forma parte de un mecanismo denominado Structural Pattern Matching. Puede hacer bastante más que comparar números o textos: también puede reconocer la forma de estructuras y extraer información de ellas.
No necesitamos aprender todo eso ahora.
En esta primera aproximación nos quedamos con su uso más sencillo porque todavía estamos aprendiendo a diseñar decisiones con claridad.
Más adelante, cuando trabajemos con colecciones, funciones y estructuras de datos, volveremos a match. Entonces veremos por qué Python no lo llamó simplemente switch.
Lo que acabamos de aprender es la puerta de entrada a
match, no su límite.
8. Un ejemplo completo
Un receptor utiliza códigos sencillos para indicar su estado:
0: sin señal;1: señal recibida;2: datos válidos;3: error de comunicación.
Podemos construir el programa así:
codigo = int(input("Código recibido: "))
match codigo:
case 0:
print("Sin señal")
case 1:
print("Señal recibida")
case 2:
print("Datos válidos")
case 3:
print("Error de comunicación")
case _:
print("Código desconocido")
Prueba mentalmente qué ocurrirá con:
0
2
3
9
Antes de ejecutar un programa, intenta siempre anticipar qué camino seguirá.
Ese hábito es más importante que memorizar la sintaxis.
9. Errores frecuentes
Confundir case con una condición
Esto no es la forma adecuada de utilizar el nivel básico de match:
case temperatura > 30:
Si lo que quieres es comprobar si una temperatura supera un límite, la herramienta natural sigue siendo:
if temperatura > 30:
Olvidar los dos puntos
Como ocurre con if, cada cabecera necesita ::
match opcion:
case 1:
print("Opción 1")
Olvidar el sangrado
Los bloques que pertenecen a cada case deben quedar indentados:
match opcion:
case 1:
print("Correcto")
Mezclar texto y números
Si utilizas:
opcion = input("Opción: ")
la entrada "1" es texto.
Por tanto, este caso:
case 1:
no coincide con "1".
Puedes convertir antes la entrada:
opcion = int(input("Opción: "))
o trabajar deliberadamente con casos de texto:
case "1":
10. Ideas esenciales
match / caseestá disponible desde Python 3.10.matchindica el valor que queremos analizar.- Cada
caserepresenta una posible coincidencia. - Python comprueba los casos en orden y se queda con la primera coincidencia válida.
case _funciona como comodín para cualquier otro caso.matchpuede resultar muy claro cuando una variable puede tomar varios valores concretos.if / elif / elsesigue siendo la opción natural para rangos, desigualdades y condiciones lógicas.matches más potente de lo que hemos utilizado aquí: su capacidad para trabajar con patrones estructurales la veremos más adelante.
11. Una idea para quedarse
Con if, la pregunta habitual es:
«¿Se cumple esta condición?»
Con match, en su forma más sencilla, la pregunta cambia:
«¿Con cuál de estos casos coincide este valor?»
Elegir bien entre ambas formas de pensar hace que el código no solo funcione: hace que también sea más fácil de leer.
Ponlo en práctica
El siguiente paso será resolver una serie de ejercicios específicos de match / case, empezando por coincidencias simples y aumentando progresivamente la dificultad.
Esa práctica se desarrollará en una pieza independiente, igual que en las anteriores entregas de Python.







