Comment utiliser l’opérateur ternaire Python

Ce 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 toptips.fr.

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 est évaluée à 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 vaut True.
  • 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, l’énergie 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 dirigiez une librairie et que vous accordiez 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) est Faux.
  • bool() renvoie True.
>>> 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 combinant 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 est fausse.
  • Élément à l’index 1 dans le tuple : la valeur à utiliser lorsque la condition est vraie.

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 fausse.

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. Alors discount_dict[numVisits > 7] évalue à 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’énergie chute à une valeur inférieure ou égale à zéro.

Cependant, si l’énergie 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 fausse.

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 :

ScoreNiveau de difficultéMoins de 10facileEntre 10 et 20 moyenSupérieur à 20difficile

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 si condition sinon 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.