Python - Instruction Match-Case : Guide Ultime pour les Débutants

Bonjour à tous, aspirants programmeurs Python !aujourd'hui, nous allons plonger dans l'une des fonctionnalités plus récentes de Python : l'instruction match-case. Envisagez-le comme un couteau suisse pour gérer différents scénarios dans votre code. Partons ensemble dans cette aventure passionnante !

Python - Match-Case Statement

Qu'est-ce que l'instruction Match-Case ?

L'instruction match-case, introduite dans Python 3.10, est comme une version superhero des structures if-elif-else. Elle nous permet de comparer une valeur à plusieurs modèles et d'exécuter du code en fonction du premier modèle correspondant.

Syntaxe de Base

match sujet:
case modèle1:
# Code pour modèle1
case modèle2:
# Code pour modèle2
case _:
# Cas par défaut

Analysons cela avec un exemple amusant :

def saluer_superheros(héros):
match héros:
case "Spider-Man":
print("Avec de grands pouvoirs viennent de grandes responsabilités !")
case "Iron Man":
print("Je suis Iron Man.")
case "Black Widow":
print("Je suis toujours en train de ramasser après vous les garçons.")
case _:
print("Je ne connais pas ce superhéros, mais il est probablement incroyable !")

saluer_superheros("Spider-Man")
saluer_superheros("Wonder Woman")

Dans cet exemple, nous faisons correspondre la variable héros à différents noms de superhéros. Le cas _ agit comme notre cas par défaut, attrapant tous les héros non reconnus.

Cas Combinés dans l'Instruction Match

Parfois, nous voulons gérer plusieurs modèles avec le même code. Python est là pour nous !

def classer_nombre(nombre):
match nombre:
case 0:
print("Zéro est un nombre unique !")
case 1 | 2 | 3:
print("C'est un petit nombre positif.")
case -1 | -2 | -3:
print("C'est un petit nombre négatif.")
case _:
print("C'est un plus grand nombre.")

classer_nombre(2)
classer_nombre(-2)
classer_nombre(100)

Ici, nous utilisons l'opérateur | pour combiner les cas. C'est comme dire "ou" en français courant.

Liste en Argument dans l'Instruction Match Case

L'instruction match-case n'est pas seulement pour des valeurs simples. Elle peut gérer des structures complexes comme des listes également !

def analyser_coordonnées(point):
match point:
case [0, 0]:
print("Origine")
case [0, y]:
print(f"Axe des y à y = {y}")
case [x, 0]:
print(f"Axe des x à x = {x}")
case [x, y]:
print(f"Point à ({x}, {y})")
case _:
print("Ce n'est pas un point 2D valide")

analyser_coordonnées([0, 0])
analyser_coordonnées([5, 0])
analyser_coordonnées([3, 4])
analyser_coordonnées([1, 2, 3])

Cet exemple montre comment nous pouvons faire correspondre des modèles de liste. C'est comme donner à votre code une vision à rayons X pour voir à l'intérieur des listes !

Utilisation de "if" dans la Clause "Case"

Pour ces moments où nous avons besoin de plus de précision dans notre correspondance, nous pouvons ajouter des conditions de garde utilisant if :

def classer_age(age):
match age:
case n if n < 0:
print("Alerte voyageur dans le temps ! Age négatif détecté.")
case n if n < 13:
print("Vous êtes un enfant. Profitez de votre jeunesse !")
case n if n < 20:
print("Bienvenue dans les années teenage !")
case n if n < 65:
print("La vie adulte, c'est parti !")
case _:
print("La sagesse vient avec l'âge. Vous en avez plein le dos !")

classer_age(8)
classer_age(15)
classer_age(30)
classer_age(70)

Ici, nous utilisons des conditions if pour affiner davantage nos cas. C'est comme donner à votre instruction match une loupe !

Applications Pratiques

Maintenant que nous avons couvert les bases, examinons un exemple plus complexe qui combine divers aspects de l'instruction match-case :

def traiter_commande(commande):
match commande.split():
case ["quit"]:
print("Sortie du programme. Au revoir !")
return False
case ["hello" | "hi" | "hey", nom]:
print(f"Bonjour, {nom} ! Ravi de vous rencontrer.")
case ["add", *nombres] if all(n.isdigit() for n in nombres):
resultat = sum(int(n) for n in nombres)
print(f"La somme est : {resultat}")
case ["multiply", *nombres] if all(n.isdigit() for n in nombres):
resultat = 1
for n in nombres:
resultat *= int(n)
print(f"Le produit est : {resultat}")
case _:
print("Je ne comprends pas cette commande.")
return True

while True:
user_input = input("Entrez une commande : ")
if not traiter_commande(user_input):
break

Cet exemple montre un processeur de commandes qui peut gérer divers types d'entrée :

  • Il peut quitter le programme
  • Il peut saluer les utilisateurs
  • Il peut ajouter ou multiplier des nombres
  • Il gère avec grâce les commandes inconnues

L'instruction match-case brille dans des scénarios comme celui-ci, où nous devons gérer plusieurs types d'entrée de manière claire et concise.

Conclusion

L'instruction match-case est un outil puissant dans votre boîte à outils Python. Elle permet de rendre le code plus lisible et plus facile à entretenir lorsqu'il s'agit de conditions multiples. Rappelez-vous, comme tout outil, c'est l'utilisation dans les bonnes situations qui compte. Ne forcez pas là où un simple if-else suffirait, mais adoptez-la lorsque vous avez besoin de gérer des scénarios complexes de correspondance de modèles.

Au fur et à mesure de votre parcours Python, vous trouverez de plus en plus de situations où l'instruction match-case peut simplifier votre code et le rendre plus expressif. Bon codage, et que vos matches trouvent toujours leur cas parfait !

Table de Référence Rapide

Fonctionnalité Exemple
Match-Case de Base match valeur: case modèle: ...
Cas par Défaut case _: ...
Cas Combinés case modèle1 | modèle2: ...
Correspondance de Liste case [x, y]: ...
Conditions de Garde case modèle if condition: ...

N'oubliez pas, la pratique fait le maître. Allez-y, expérimentez avec ces modèles, et voyez vos compétences Python décoller !

Credits: Image by storyset