Café y Código

5. match / case: ramificar como con switch 🔀

En muchos lenguajes existe switch: mirás una expresión y ejecutás el bloque que coincida. En Python no hay la palabra switch; desde Python 3.10 el mecanismo equivalente (y más potente) es match seguido de varios case.

¿Para qué sirve? Para elegir un camino entre muchas alternativas sobre el mismo valor, con código que se lee como una tabla: primero encaja un case, se ejecuta su bloque y no se siguen probando los demás (salvo que uses bloques vacíos con fall-through, que en Python no es el estilo habitual).

Necesitás Python 3.10 o superior. Con una versión anterior, usá if / elif / else como en la lección 4.

Sintaxis mínima

esqueleto.py
PYTHON
1 valor = "b"
2 match valor:
3 case "a":
4 print("Opción A")
5 case "b":
6 print("Opción B")
7 case _:
8 print("Cualquier otra cosa (_ = default)")
  • match valor: — qué vas a comparar.
  • case patrón: — si encaja, entra al bloque indentado.
  • case _: — “resto” (como default en switch).

Cinco ejemplos guiados

Los comentarios marcan cada caso; podés copiar el archivo y ejecutarlo por partes.

match_case_cinco_ejemplos.py
PYTHON
1 # ========== 1) Comandos de texto (estilo switch clásico) ==========
2 comando = "ayuda"
3 match comando:
4 case "iniciar":
5 print("Arrancando…")
6 case "detener":
7 print("Deteniendo…")
8 case "ayuda":
9 print("Comandos: iniciar, detener, ayuda")
10 case _:
11 print("Comando desconocido")
12
13 # ========== 2) Día de la semana como número (1=lunes … 7=domingo) ==========
14 dia = 3
15 match dia:
16 case 1:
17 print("Lunes")
18 case 2:
19 print("Martes")
20 case 3:
21 print("Miércoles")
22 case 4 | 5:
23 print("Jueves o viernes")
24 case 6 | 7:
25 print("Fin de semana")
26 case _:
27 print("Día no válido (usá 1-7)")
28
29 # ========== 3) Código HTTP: varios valores en un solo case (| = “o”) ==========
30 codigo = 404
31 match codigo:
32 case 200 | 201:
33 print("OK")
34 case 400:
35 print("Pedido mal formado")
36 case 401 | 403:
37 print("Problema de permisos")
38 case 404:
39 print("No encontrado")
40 case _:
41 print("Otro código")
42
43 # ========== 4) Guarda: case x if condición ==========
44 n = -5
45 match n:
46 case x if x < 0:
47 print("Es negativo:", x)
48 case 0:
49 print("Es cero")
50 case x if x > 0:
51 print("Es positivo:", x)
52
53 # ========== 5) Menú por consola (misma idea que if/elif, con match) ==========
54 opcion = input("1=café 2=té 3=salir: ").strip()
55 match opcion:
56 case "1":
57 print("Café ☕")
58 case "2":
59 print("Té 🍵")
60 case "3":
61 print("Chau 👋")
62 case _:
63 print("Opción inválida")

Trucos que conviene recordar

  • case 4 | 5: — unifica varios valores en un solo bloque (OR entre patrones).
  • case _: — siempre al final como “else”; atrapa lo que no encajó antes.
  • case x if x < 0: — guarda: primero se liga (o compara) y además debe cumplirse la if.
  • El match de Python también permite patrones con tuplas, listas y clases; eso se profundiza cuando domines listas y objetos en las próximas lecciones.

🐍 Práctica rápida

Escribí un match sobre una variable mes ("ene", "feb", …) que imprima si es “estación cálida”, “fría” o “intermedia” (agrupá meses como prefieras) y un case _: para mes inválido.

Dato curioso: Primera versión pública en 1991; Guido van Rossum. Wikipedia

Ko-fi
Donaciones
Apoyá cafeycodigo con un café en Ko-fi. Colaboradores: insignia, muro y zona exclusiva.