Comment utiliser l'opérateur ternaire Python
Publié: 2023-01-04Ce guide vous apprendra à utiliser l'opérateur ternaire en Python. Vous apprendrez la syntaxe et coderez plusieurs exemples pour comprendre comment cela fonctionne.
Nous commencerons par examiner le fonctionnement de l'instruction conditionnelle if-else, puis nous apprendrons à écrire une expression équivalente à l'aide de l'opérateur ternaire.
Ensuite, nous allons coder quelques exemples, puis apprendre à émuler le comportement de l'opérateur ternaire de Python à l'aide d'un tuple et d'un dictionnaire Python. Enfin, nous passerons en revue quelques cas d'utilisation où vous devriez préférer utiliser l'opérateur ternaire.
Commençons!
L'instruction If-Else en Python : un examen
Vous pouvez coder en démarrant un REPL Python ou dans l'éditeur Python en ligne de Geekflare.
La syntaxe générique de l'instruction if-else en Python est la suivante :
if condition: # do this else: # do this
Dans l'extrait ci-dessus, condition
désigne la condition à vérifier. Si la condition prend la valeur True
, le bloc if est déclenché. Si la condition prend la valeur False
, les instructions à l'intérieur du bloc else sont exécutées.
Voici un exemple où la variable game_over
se voit attribuer une valeur booléenne selon que la valeur de energy
est ou non inférieure ou égale à zéro.
- Si
energy <= 0
,game_over
vautTrue
. - Sinon,
game_over
est faux.
L'extrait de code suivant montre comment procéder à l'aide des instructions conditionnelles if-else :
energy = -1 if energy <= 0: game_over = True else: game_over = False print(game_over) # True
Dans cet exemple, energy
est -1 qui est inférieure à 0. Donc game_over
est True.
Opérateur ternaire Python : syntaxe et exemples
Python a un opérateur ternaire qui fonctionne un peu comme l'opérateur conditionnel ternaire dans des langages comme C et C++. La syntaxe générale pour l'utiliser est la suivante :
expression1 if condition else expression2
Analysons la syntaxe ci-dessus :
-
condition
: La condition à vérifier. -
expression1
: l'expression à évaluer si la condition est vraie. -
expression2
: l'expression à évaluer si la condition est fausse.
Maintenant, nous allons identifier ce que expression1
, expression2
et condition
doivent être à partir de la version if-else du code.
En mettant tout cela ensemble, nous avons ce qui suit en utilisant l'opérateur ternaire de Python.
game_over = True if energy <= 0 else False print(game_over) # True
Codez un autre exemple. Supposons que vous gérez une librairie et que vous accordez aux lecteurs une remise sur leur achat en fonction de la fréquence à laquelle ils ont visité votre magasin au cours de la dernière année.
Soit numVisits
le nombre de visites.
- Si
numVisits > 7
, le pourcentage de remise,discount_perc
est de 20. - Sinon,
discount_perc
est 5.
Nous utilisons l'opérateur ternaire pour attribuer une valeur à la variable discount_perc
.
numVisits = 10 discount_perc = 20 if numVisits > 7 else 5 print(discount_perc) # 20 (as numVisits = 10 which is > 7)
Ensuite, nous apprendrons à émuler l'opérateur ternaire à l'aide d'un tuple Python et d'un dictionnaire.
Emulation de l'opérateur ternaire avec Python Tuple
Comme tous les itérables en Python, les tuples suivent une indexation nulle. Donc, si vous avez deux éléments dans un tuple, tuple_name[0]
désigne le premier élément du tuple et tuple_name[1]
donne le deuxième élément du tuple.
Les types de données de base en Python sont entier, flottant, chaîne et booléen. Python prend en charge la conversion de type qui vous permet de représenter un type de données particulier par sa représentation équivalente dans un autre type de données.
Démarrez un REPL Python et exécutez les exemples suivants. Si vous essayez de convertir des entiers en booléens, vous remarquerez ce qui suit :
-
bool(0)
vautFalse
. -
bool(<any non-zero integer>)
renvoieTrue
.
>>> bool(0) False >>> bool(1) True >>> bool(-1) True >>> bool(10) True
De même, lors de la conversion de booléen en entiers, nous avons ce qui suit :
>>> int(True) 1 >>> int(False) 0
En associant la coulée de type et l'indexation, nous pouvons procéder comme suit :
- Élément à l'index 0 dans le tuple : La valeur à utiliser lorsque la
condition
estFalse
. - Élément à l'index 1 dans le tuple : La valeur à utiliser lorsque la
condition
estTrue
.
En utilisant ce qui précède, nous avons ce qui suit :
>>> numVisits = 10 >>> discount_perc = (5,20)[numVisits > 7] >>> discount_perc # 20
Ici, la condition numVisits > 7
est True
car numVisits
est 10. Parce que int(True)
est 1, la valeur de discount_perc
est 20, l'élément à l'index 1.
Emulation de l'opérateur ternaire avec le dictionnaire Python
Vous pouvez définir True
et False
comme clés du dictionnaire. Et vous pouvez définir expression1
et expression2
comme valeurs correspondant respectivement aux clés True
et False
.
some_dict = {True: expression1, False: expression2 }
Qu'est ce que tu fais après? Maintenant, si vous utilisez some_dict[condition]
, expression1
correspondant à la clé True
est évaluée si la condition
est True
. Et expression2
est évaluée lorsque la condition
est False
.
Codons l'exemple discount_perc
(encore) mais cette fois en utilisant un dictionnaire Python.
>>> numVisits = 10 >>> discount_dict = {True: 20, False:5} >>> discount_perc = discount_dict[numVisits > 7] >>> discount_perc # 20
Ici, numVisits = 10
qui est supérieur à 7. Par conséquent, la condition numVisits > 7
est True
. Donc discount_dict[numVisits > 7]
est évalué à discount_dict[True]
qui est la valeur 20.
Devriez-vous toujours utiliser l'opérateur ternaire Python ?
Jusqu'à présent, nous avons appris à utiliser l'opérateur ternaire. Mais doit-on toujours utiliser l'opérateur ternaire ? Eh bien, l'opérateur ternaire n'est peut-être pas le meilleur choix pour tous les cas d'utilisation. Cette section explique quand vous devriez préférer l'utilisation de l'opérateur ternaire aux instructions if-else. Nous verrons également quand nous devrions envisager d'utiliser l'instruction if-else au lieu de l'opérateur ternaire.
Plus concis que les blocs If-Else
Comme mentionné, en Python, l'expression de l'opérateur ternaire est plus concise que l'instruction if-else. Par conséquent, vous pouvez l'utiliser pour vérifier les conditions et évaluer les expressions conditionnellement à la volée.
Dans l'exemple suivant, nums
est une liste de 100 entiers générés aléatoirement. Pour chacun des 100 nombres, on vérifie s'il est pair ou impair. Et cette évaluation se produit en ligne à l'intérieur de la f-string.
import random nums = [random.choice(range(100)) for i in range(10)] for num in nums: print(f"{num} is {'even' if num%2==0 else 'odd'}")
# sample output 0 is even 56 is even 6 is even 53 is odd 62 is even 7 is odd 8 is even 77 is odd 41 is odd 94 is even
L'opérateur ternaire nécessite la clause Else
Lorsque vous utilisez les instructions conditionnelles if-else, la clause else est facultative. Prenons un exemple. La variable game_over
est définie sur True
si l' energy
tombe à une valeur inférieure ou égale à zéro.
Cependant, si l' energy
est supérieure à zéro, la variable game_over
n'est jamais initialisée. Vous rencontrerez donc des erreurs si vous essayez d'accéder à la variable game_over
.
energy = 5 if energy <= 0: game_over = True print(f"Is the game over? {game_over}")
Traceback (most recent call last): File "ternary_op.py", line 39, in <module> print(f"Is the game over? {game_over}") NameError: name 'game_over' is not defined
Une façon de résoudre ce problème consiste à définir initialement game_over
sur False
et à le mettre à jour sur True
si le niveau d'énergie est inférieur ou égal à zéro.
energy = 5 game_over = False if energy <= 0: game_over1 = True print(f"Is the game over? {game_over}")
Cependant, lors de l'utilisation de l'opérateur ternaire Python équivalent de ce qui précède, la clause else n'est pas facultative. L'opérateur ternaire nécessite que l'expression soit évaluée lorsque la condition
est False
.
game_over = True if energy <= 0 else False
Si vous changez ce qui précède en game_over = True if energy <= 0
en supprimant la partie else, vous rencontrerez une erreur de syntaxe, comme indiqué :
File "ternary_op.py", line 42 game_over = True if energy <= 0 ^ SyntaxError: invalid syntax
Pour vérifier plusieurs conditions, utilisez des instructions If-Else
Prenons l'exemple : chaque question d'un ensemble de questions d'entrevue de codage est associée à un score de difficulté. En fonction de ce score, nous attribuons l'un des trois niveaux de difficulté : facile, moyen ou difficile, à une question particulière. Supposons que nous ayons les éléments suivants :
Score | Niveau de difficulté |
Moins de 10 | facile |
Entre 10 et 20 | moyen |
Plus de 20 | difficile |
Compte tenu du score de difficulté, vous pouvez obtenir son niveau de difficulté en utilisant l'opérateur ternaire Python comme indiqué :
score = 12 difficulty_level = "easy" if score < 10 else "hard" if score > 20 else "medium" print(difficulty_level) # medium
L'expression de l'opérateur ternaire dans le bloc de code ci-dessus est de la forme suivante :
expression1 if condition1 else expression2 if condition2 else expression3
Bien que concis, il est un peu difficile à lire et à analyser. L'image suivante montre comment le flux de contrôle se produit dans ce cas.
L'extrait de code suivant montre une implémentation équivalente utilisant des instructions if-else. Comme on le voit, le flux de contrôle est beaucoup plus facile à comprendre et le code est plus lisible.
if score < 10: difficulty_level="easy" elif score > 20: difficulty_level="hard" else: difficulty_level="medium" print(difficulty_level)
Par conséquent, lorsque vous avez plusieurs conditions, vous devez utiliser les blocs if-else au lieu de l'opérateur ternaire. Cela garantit que le code est facile à lire et à comprendre.
En outre, lorsque vous devez exécuter plusieurs instructions, selon que la condition est vraie ou fausse, vous devez envisager d'utiliser l'instruction if-else.
Conclusion
Voici un récapitulatif de ce que vous avez appris dans ce tutoriel.
- En Python, l'opérateur ternaire peut être utilisé avec la syntaxe suivante :
expression1 if condition else expression2
. - Vous pouvez émuler le comportement de l'opérateur ternaire à l'aide de tuples et de dictionnaires Python.
- Bien que l'opérateur ternaire puisse être une alternative plus concise aux blocs if-else, vous devez vous assurer que le code est lisible. Pour améliorer la lisibilité du code, vous pouvez utiliser les instructions if-else au lieu de l'opérateur ternaire, en particulier lorsque vous devez enchaîner plusieurs conditions.
Ensuite, apprenez à consulter le didacticiel sur les opérateurs égaux et non égaux en Python.