Résumé : Étant donné que les instructions switch-case ne font pas partie de Python, vous pouvez utiliser l'une des méthodes suivantes pour créer une construction switch-case dans votre code :
- Utiliser un dictionnaire Python
- Création d'une classe de commutateur personnalisée
- Utiliser
if-elif-else
Déclarations conditionnelles - Utiliser une fonction Lambda
Problème : Étant donné un scénario de cas de commutateur de contrôle de sélection en Python ; comment trouver un remplacement pour l'instruction switch puisque Python n'a pas de disposition pour les instructions switch-case.
Aperçu :Avant de discuter des solutions à notre problème, nous devons avoir une image claire de l'instruction switch-case elle-même. Pour comprendre les instructions switch, répondons à quelques questions :
Qu'est-ce qu'une instruction Switch ?
Dans les langages de programmation tels que C, C++, C# et Java, switch est une instruction conditionnelle utilisée pour tester la valeur d'une variable, puis comparer cette valeur avec plusieurs cas. Une fois la casse correspondante trouvée, le bloc de code défini dans la casse correspondante est exécuté. Jetons un coup d'œil à l'organigramme suivant pour visualiser le principe de fonctionnement du boîtier de commutation :
Commutateur vs Si-Sinon
Dans un programme qui a besoin d'un ensemble complexe de if
imbriqués , une instruction switch est toujours une alternative meilleure et plus efficace dans de telles situations. Voici quelques-uns des facteurs clés qui doivent être pris en considération lors de la décision d'utiliser switch case ou if-else dans le code :
- Si le nombre de cas est supérieur, les instructions switch-case sont toujours plus efficaces et plus rapides que
if-else
. - Les instructions Switch case sont plus adaptées aux valeurs de données fixes alors que
if-else
les conditions doivent être utilisées en cas de valeurs booléennes. - Les instructions de commutation vérifient les expressions basées uniquement sur un seul paramètre/valeur de variable alors que
if-else
les instructions conditionnelles peuvent être utilisées pour tester des expressions sur une plage de valeurs.
Il existe quelques autres facteurs régissant l'utilisation appropriée des deux déclarations. Cependant, cela dépasse le cadre de cet article, car nous allons nous concentrer sur les remplacements des instructions switch en Python dans cet article. Cela nous amène à la question suivante et probablement la plus importante.
Pourquoi Python n'a-t-il pas d'instruction "switch" ?
Vous vous êtes peut-être demandé tout le temps pourquoi proposons-nous même une solution pour remplacer l'instruction switch en python. Python n'a-t-il pas d'instruction "switch" ?
La réponse est NON !!! Python n'en a pas besoin.
- La plupart des langages de programmation ont des instructions switch-case car ils manquent de constructions de mappage appropriées. Alors qu'en Python, nous avons des constructions de mappage bien définies et vous pouvez facilement avoir une table de mappage sous la forme d'un dictionnaire python.
- De plus, Python n'a pas d'instruction switch car aucune des propositions suggérées jusqu'à présent n'a été jugée acceptable.
Remarque :Guido van Rossum, le créateur de Python, déclare :"Une sorte d'instruction switch se trouve dans de nombreux langages et il n'est pas déraisonnable de s'attendre à ce que son ajout à Python nous permette d'écrire certains codes plus proprement et plus efficacement qu'auparavant ."
Cela pourrait donc indiquer qu'à l'avenir, nous pourrions découvrir que l'instruction switch est implémentée en Python, bien qu'il soit peu probable que cela se produise de si tôt. (Mais l'avenir est plein d'imprévisibilités !!!)
Maintenant que nous avons un aperçu de l'instruction switch, découvrons les alternatives aux instructions switch qui peuvent être utilisées en Python.
Solutions
Voyons comment nous pouvons créer des alternatives pour changer de cas et demander à l'utilisateur de sélectionner une option pour l'opération qu'il souhaite effectuer. Sur la base du choix des utilisateurs, la sortie doit être affichée. Voici un exemple de résultat de ce que nous voulons réaliser :
Press 1: Addition Press 2: Subtraction Press 3: Multiplication Press 4: Division Enter your choice: 1 Enter 1st Number: 500 Enter 2nd Number: 2000 Answer = 2500
Alors sans plus tarder, que les jeux commencent !
Méthode 1 :Utiliser un dictionnaire
Un dictionnaire en python stocke les éléments sous la forme de paires clé-valeur de sorte qu'une certaine valeur corresponde à une clé spécifique. Examinons le code suivant pour comprendre comment nous pouvons utiliser un dictionnaire comme alternative pour changer de casse et résoudre notre problème (Veuillez suivre les commentaires pour mieux comprendre le code) :
# The default case when no case matches def default(a, b): return "Invalid Entry!" def switch(option, a, b): # create the dictionary and switch-cases / choices return { '1': lambda a, b: a + b, '2': lambda a, b: a - b, '3': lambda a, b: a * b, '4': lambda a, b: a / b, }.get(option, default)(a, b) # User Menu Prompt print(''' Press 1: Addition Press 2: Subtraction Press 3: Multiplication Press 4: Division ''') # Accept User Entry choice = input("Enter your choice: ") x = int(input("Enter 1st Number: ")) y = int(input("Enter 2nd Number: ")) # Pass Values Entered by User to evaluate and then Print the output print(switch(choice, x, y))
Sortie :
Press 1: Addition Press 2: Subtraction Press 3: Multiplication Press 4: Division Enter your choice: 1 Enter 1st Number: 15 Enter 2nd Number: 50 Answer = 65
Vous pouvez essayer vous-même dans notre shell de code interactif !
Exercice :Appuyez sur différentes touches et essayez les différentes options !
À retenir :
get()
est une fonction intégrée en python qui renvoie la valeur d'une clé spécifiée.lambda
est un mot-clé en python qui est utilisé pour définir une fonction anonyme à l'intérieur d'une autre fonction.
Je vous recommande vivement de parcourir ces articles pour une compréhension approfondie des fonctions des dictionnaires lambda et python et de leur utilisation :
- En savoir plus sur les dictionnaires Python.
- En savoir plus sur la fonction Python Lambda.
Si vous n'êtes pas à l'aise avec l'utilisation de get()
et lambda
, j'ai une solution pour vous aussi. Jetez un œil au code suivant qui peut être un peu plus long et plus complexe en termes de temps et d'utilisation de la mémoire, mais qui est certainement plus facile à comprendre :
# Addition def choice1(x, y): return x + y # Subtraction def choice2(x, y): return x - y # Multiplication def choice3(x, y): return x * y # Division def choice4(x, y): return x / y def switch(option, a, b): try: # create the dictionary and switch-cases / choices return { '1': choice1, '2': choice2, '3': choice3, '4': choice4, }[choice](x, y) except KeyError: # Default Case return 'Invalid Entry!' # User Menu Prompt print(''' Press 1: Addition Press 2: Subtraction Press 3: Multiplication Press 4: Division ''') # Accept User Entry choice = input("Enter your choice: ") x = int(input("Enter 1st Number: ")) y = int(input("Enter 2nd Number: ")) # Pass Values Entered by User to evaluate and then Print the output print("Answer = ", switch(choice, x, y))
Sortie
Press 1: Addition Press 2: Subtraction Press 3: Multiplication Press 4: Division Enter your choice: 2 Enter 1st Number: 20 Enter 2nd Number: 10 Answer = 10
Méthode 2 :Créer une classe de commutateur
Une autre solution de contournement pour utiliser les cas de commutation dans nos programmes consiste à créer une classe avec une fonctionnalité de base de cas de commutation définie en son sein. Nous pouvons définir chaque cas dans des fonctions distinctes à l'intérieur de la classe.
Jetons un coup d'œil au programme suivant pour comprendre comment nous pouvons créer une classe switch-case (Comme toujours, je vous demande de lire les commentaires dans le code pour avoir une meilleure prise en main) :
class SwitchCase: def case(self, option, x, y): default = "Invalid Entry!" # lambda invokes the default case # getattr() is used to invoke the function choice that the user wants to evaluate return getattr(self, 'choice' + str(option), lambda x, y: default)(x, y) # Addition def choice1(self, x, y): return x + y # Subtraction def choice2(self, x, y): return x - y # Multiplication def choice3(self, x, y): return x * y # Division def choice4(self, x, y): return x / y # Default Case def default(self, x, y): return "Invalid Entry!" # creating the SwitchCase class object switch = SwitchCase() # User Menu Prompt print(''' Press 1: Addition Press 2: Subtraction Press 3: Multiplication Press 4: Division ''') # Accept User Entry option = input("Enter your choice: ") x = int(input("Enter 1st Number: ")) y = int(input("Enter 2nd Number: ")) # Pass Values Entered by User to evaluate and then Print the output print("Answer = ", switch.case(option, x, y))
Sortie
Press 1: Addition Press 2: Subtraction Press 3: Multiplication Press 4: Division Enter your choice: 4 Enter 1st Number: 24 Enter 2nd Number: 4 Answer = 6.0
Méthode 3 :une solution rapide à l'aide de la fonction Lambda
Bien que cette méthode ne soit peut-être pas la meilleure en termes de complexité du code, elle peut s'avérer utile dans les situations où vous souhaitez utiliser une fonction une fois, puis la supprimer une fois l'objectif atteint. De plus, cette méthode affiche combien de temps les morceaux de codes peuvent être minimisés, donc cette méthode fait une entrée digne dans la liste de nos solutions proposées.
var = (lambda x, y, c: x + y if c == '1' else x - y if c == '2' else x * y if c == '3' else x / y if c == '4' else 'Invalid Entry!') # User Menu Prompt print(''' Press 1: Addition Press 2: Subtraction Press 3: Multiplication Press 4: Division ''') # Accept User Entry option = input("Enter your choice: ") x = int(input("Enter 1st Number: ")) y = int(input("Enter 2nd Number: ")) print(var(x, y, option))
Sortie
Press 1: Addition Press 2: Subtraction Press 3: Multiplication Press 4: Division Enter your choice: 4 Enter 1st Number: 500 Enter 2nd Number: 25 20.0
Méthode 4 :Utiliser if-elif-else
Parfois, il est toujours préférable de suivre les constructions de programmation standard car elles nous fournissent les solutions les plus simples dans la plupart des cas. L'utilisation de if-elif-else n'est peut-être pas le remplacement exact d'un boîtier de commutateur, mais elle fournit une construction et une structure plus simples. De plus, cela évite le problème de KeyError si le cas correspondant n'est pas trouvé.
Examinons le code suivant pour comprendre comment nous pouvons utiliser les conditionnels if-elif-else pour résoudre notre problème :
def func(choice, a, b): if choice == '1': return a + b elif choice == '2': return a - b elif choice == '3': return a * b elif choice == '4': return a / b else: return 'Invalid Entry!' # User Menu Prompt print(''' Press 1: Addition Press 2: Subtraction Press 3: Multiplication Press 4: Division ''') # Accept User Entry option = input("Enter your choice: ") x = int(input("Enter 1st Number: ")) y = int(input("Enter 2nd Number: ")) print("Answer = ", func(option, x, y))
Sortie
Press 1: Addition Press 2: Subtraction Press 3: Multiplication Press 4: Division Enter your choice: 1 Enter 1st Number: 500 Enter 2nd Number: 2000 Answer = 2500
Conclusion
Dans cet article, nous avons expliqué comment remplacer les instructions switch case dans notre code python en utilisant le mappage du dictionnaire python ou en créant une classe ou en appliquant une solution rapide à l'aide d'une fonction python lambda. Cela dit, la meilleure façon d'implémenter des commutateurs en python est d'utiliser un dictionnaire qui mappe les paires clé et valeur.
J'espère que vous avez apprécié la lecture de cet article et qu'après l'avoir lu, vous pourrez facilement utiliser une alternative à la casse dans votre code. Si vous trouvez ces discussions et ces solutions intéressantes, abonnez-vous et restez à l'écoute pour des articles plus intéressants à l'avenir !