4.1.7 Sentencia match-case

4.1.7 Sentencia match-case

Una de las novedades más esperadas (y quizás controvertidas) de Python 3.10 fue el llamado Structural Pattern Matching que introdujo en el lenguaje una nueva sentencia condicional. Ésta se podría asemejar a la sentencia «switch» que ya existe en otros lenguajes de programación.

Comparando valores

En su versión más simple, el «pattern matching» permite comparar un valor de entrada con una serie de literales. Algo así como un conjunto de sentencias «if» encadenadas. Veamos esta aproximación mediante un ejemplo:

4.1.7 Sentencia match-case

¿Qué ocurre si el valor que comparamos no existe entre las opciones disponibles? Pues en principio, nada, ya que este caso no está cubierto. Si lo queremos controlar, hay que añadir una nueva regla utilizando el subguión _ como patrón:

4.1.7 Sentencia match-case

Ejercicio

Escriba un programa en Python que pida (por separado) dos valores numéricos y un operando (suma, resta, multiplicación, división) y calcule el resultado de la operación, usando para ello la sentencia match-case.

Controlar que la operación no sea una de las cuatro predefinidas. En este caso dar un mensaje de error y no mostrar resultado final.

Ejemplo

  • Entrada: 4, 3, +
  • Salida: 4+3=7

Patrones avanzados

Nivel avanzado

La sentencia match-case va mucho más allá de una simple comparación de valores. Con ella podremos deconstruir estructuras de datos, capturar elementos o mapear valores.

Para ejemplificar varias de sus funcionalidades, vamos a partir de una tupia que representará un punto en el plano (2 coordenadas) o en el espacio (3 coordenadas). Lo primero que vamos a hacer es detectar en qué dimensión se encuentra el punto:

4.1.7 Sentencia match-case

En cualquier caso, esta aproximación permitiría un punto formado por «strings»:

4.1.7 Sentencia match-case

Por lo tanto, en un siguiente paso, podemos restringir nuestros patrones a valores enteros:

4.1.7 Sentencia match-case

Imaginemos ahora que nos piden calcular la distancia del punto al origen. Debemos tener en cuenta que, a priori, desconocemos si el punto está en el plano o en el espacio:

4.1.7 Sentencia match-case

4.1.7 Sentencia match-case

Con este enfoque, nos aseguramos que los puntos de entrada deben tener todas sus coordenadas como valores enteros:

4.1.7 Sentencia match-case

Cambiando de ejemplo, veamos un fragmento de código en el que tenemos que comprobar la estructura de un bloque de autenticación definido mediante un diccionario. Los métodos válidos de autenticación son únicamente dos: bien usando nombre de usuario y contraseña, o bien usando correo electrónico y «token» de acceso. Además, los valores deben venir en formato cadena de texto:

4.1.7 Sentencia match-case

4.1.7 Sentencia match-case

Cambiando de ejemplo, a continuación veremos un código que nos indica si, dada la edad de una persona, puede beber alcohol:

4.1.7 Sentencia match-case

  • En la línea 4 podemos observar el uso del operador OR.
  • En las líneas 6 y 8 podemos observar el uso de condiciones dando lugar a cláusulas
    guarda.
4.1.8 Operador morsa

Nivel avanzado

A partir de Python 3.8 se incorpora el operador morsa que permite unificar sentencias de asignación dentro de expresiones. Su nombre proviene de la forma que adquiere : =

Supongamos un ejemplo en el que computamos el perímetro de una circunferencia, indicando al usuario que debe incrementarlo siempre y cuando no llegue a un mínimo establecido.

Versión tradicional

4.1.7 Sentencia match-case

Consejo: Como hemos comprobado, el operador morsa permite realizar asignaciones dentro de expresiones, lo que, en muchas ocasiones, permite obtener un código más compacto. Sería conveniente encontrar un equilibrio entre la expresividad y la legibilidad.

EJERCICIOS DE REPASO
  1. Escriba un programa en Python que acepte la opción de dos jugadoras en Piedra-Pape
  • Entrada: person1=piedra; person2=papel
  • Salida: Gana persona2: El papel envuelve a la piedra
  1. Escriba un programa en Python que acepte 3 números y calcule el mínimo (solución).
  • Entrada: 7, 4, 9
  • Salida: 4
  1. Escriba un programa en Python que acepte un país (como «string») y muestre por pan
  • Entrada: Italia
  • Salida:
  1. Escriba un programa en Python que acepte 3 códigos de teclas y muestre por pantalla
  • Entrada: tecla1=Ctrl; tecla2=Alt; tecla3=Del;
  • Salida: Log out
  1. Escriba un programa en Python que acepte edad, peso, pulso y plaquetas, y determine
  • Entrada: edad=34; peso=81; heartbeat=70; plaquetas=150000
  • Salida: Apto para donar sangre

AMPLIAR CONOCIMIENTOS

  • How to Use the Python or Operator
  • Conditional Statements in Python (if/elif/else)

Publicaciones Similares