user
Switch case en Python ?
alphonsio

En Python, jusqu'à la version 3.1, il n'y a pas d'équivalent direct à l'instruction switch-case que l'on trouve dans d'autres langages comme le C, le C++ ou le Java. Cependant, il existe une solution pour simuler la fonctionnalité switch-case en Python.

Méthode 1: If-Elif-Else

Dans les cas où vous n'avez que quelques conditions ou que vous préférez une approche directe, l'utilisation de if-elif-else est simple et claire :

if case_id == 1:
    print("C'est le cas un")
elif case_id == 2:
    print("C'est le cas deux")
elif case_id == 3:
    print("C'est le cas trois")
else:
    print("C'est le cas par defaut")

Méthode 2: Python 3.10+ Match-Case

Depuis Python 3.10, l'instruction match sert d'équivalent au switch-case, permettant le pattern matching qui est plus versatile et plus puissant.

case_id = 1

match case_id:
    case 1:
        print("C'est le cas un")
    case 2:
        print("C'est le cas deux")
    case 3:
        print("C'est le cas trois")
    case _:
        print("C'est le cas par défaut")

Méthode 3: Utilisation du mappage de dictionnaire

Une approche courante en Python pour émuler un switch-case est le mappage de dictionnaire, où les clés du dictionnaire agissent comme des cas, et les valeurs sont des fonctions ou des résultats correspondant à chaque cas.

def case_one():
    return "TC'est le cas un"

def case_two():
    return "C'est le cas deux"

def case_three():
    return "C'est le cas trois"

def default_case():
    return "C'est le cas par défaut"

switch = {
    1: case_one,
    2: case_two,
    3: case_three
}

def switch_case(case_id):
    return switch.get(case_id, default_case)()

# Exemple d'utilisation
print(switch_case(1))  # Sortie: C'est le cas un
print(switch_case(4))  # Sortie: C'est le cas par défaut

Méthode 4: Utiliser une classe

Pour une approche plus structurée et réutilisable, en particulier pour les scénarios complexes, l'encapsulation de la fonctionnalité dans une classe est un bon choix de conception :

class Switcher:
    def switch(self, case_id):
        method_name = 'case_' + str(case_id)
        method = getattr(self, method_name, self.default_case)
        return method()

    def case_1(self):
        return "C'est le cas un"

    def case_2(self):
        return "C'est le cas deux"

    def case_3(self):
        return "C'est le cas trois"

    def default_case(self):
        return "C'est le cas par défaut"

# Exemple d'utilisation
switcher = Switcher()
print(switcher.switch(1))  # Sortie: C'est le cas un
print(switcher.switch(4))  # Sortie: C'est le cas par défaut