Comment écrire des branches conditionnelles avec des instructions if en Python ?

Affaires

Expliquez le branchement conditionnel avec les instructions if en Python.

  • Notions de base sur les instructions if (if, elif, else)
  • Spécifier des conditions avec des opérateurs de comparaison, etc.
  • Spécifier les conditions par numéro, liste, etc.
  • Spécifier des conditions multiples ou des négations avec des opérateurs logiques (et, ou, pas)
  • Expressions conditionnelles sur les nouvelles lignes et les lignes multiples

Il existe également un opérateur ternaire qui décrit une branche conditionnelle en une seule ligne. Voir l'article suivant.

Notions de base sur les instructions if (if, elif, else)

La forme de base de l'instruction if est la suivante

if Conditional expression 1:
    `Processing to be performed if Expression 1 is True.`
elif Conditional expression 2:
    `Processing to be performed when expression 1 is false and expression 2 is true.`
elif Expression 3:
    `Process when expression 1 and 2 are false and expression 3 is true.`
...
else:
    `Processing when all conditionals are false.`

Le “elif” correspond au “else if” en C et dans d'autres langages, et il peut y avoir un nombre quelconque de “elifs”.

S'il n'y a qu'une seule expression conditionnelle ou si le traitement lorsque false n'est pas nécessaire, les blocs “elif” et “else” peuvent être omis.

Spécifier des conditions avec des opérateurs de comparaison, etc.

Spécifiez la condition avec une opération qui renvoie un type bool (vrai, faux), comme un opérateur de comparaison.

Les opérateurs de comparaison Python sont les suivants

opérateurrésultat
x < yvrai si x est inférieur à y
x <= yvrai si x est inférieur ou égal à y
x > yvrai si x est plus grand que y
x >= yvrai si x est supérieur ou égal à y
x == yvrai si les valeurs x et y sont égales
x != yvrai si les valeurs x et y ne sont pas égalesx is yvrai si x et y sont le même objetx is not yvrai si x et y ne sont pas le même objetx in yvrai si x est contenu dans yx not in yvrai si x n'est pas contenu dans y

Exemple. Pour plus de commodité, il est défini comme une fonction avec l'instruction def.

def if_test(num):
    if num > 100:
        print('100 < num')
    elif num > 50:
        print('50 < num <= 100')
    elif num > 0:
        print('0 < num <= 50')
    elif num == 0:
        print('num == 0')
    else:
        print('num < 0')

if_test(1000)
# 100 < num

if_test(70)
# 50 < num <= 100

if_test(0)
# num == 0

if_test(-100)
# num < 0

Ce qui suit peut être écrit d'une manière qui est unique à Python. Voir l'article suivant pour plus de détails.
a < x < b

def if_test2(num):
    if 50 < num < 100:
        print('50 < num < 100')
    else:
        print('num <= 50 or num >= 100')

if_test2(70)
# 50 < num < 100

if_test2(0)
# num <= 50 or num >= 100
  • ==
  • !=

Ce qui précède est une comparaison de valeurs ; pour comparer les identités d'objets, utilisez ce qui suit

  • is
  • is not

Par exemple, lors de la comparaison d'un nombre entier et d'un nombre à virgule flottante, “==” renvoie vrai si les valeurs sont équivalentes, mais “is” renvoie faux car il s'agit d'objets différents.

i = 10
print(type(i))
# <class 'int'>

f = 10.0
print(type(f))
# <class 'float'>

print(i == f)
# True

print(i is f)
# False

Il est également possible de faire la condition si une liste ou une chaîne de caractères contient un élément spécifique (caractère).

  • in:inclure
  • not in:ne comprenant pas
def if_test_in(s):
    if 'a' in s:
        print('a is in string')
    else:
        print('a is NOT in string')

if_test_in('apple')
# a is in string

if_test_in('melon')
# a is NOT in string

Spécifier les conditions par numéro, liste, etc.

L'expression conditionnelle d'une instruction if peut être un nombre, une liste ou un autre objet qui n'est pas de type bool (true, false).

if 10:
    print('True')
# True

if [0, 1, 2]:
    print('True')
# True

Dans l'expression conditionnelle d'une instruction if Python, les objets suivants sont considérés comme faux.

Les nombres représentant zéro, les chaînes de caractères vides, les listes, etc. sont considérés comme faux ; tous les autres sont considérés comme vrais.

Le jugement de l'objet peut être vérifié avec bool().

print(bool(10))
# True

print(bool(0.0))
# False

print(bool([]))
# False

print(bool('False'))
# True

Cela peut être utilisé pour simplement écrire le processus lorsque la liste est vide, par exemple.

def if_test_list(l):
    if l:
        print('list is NOT empty')
    else:
        print('list is empty')

if_test_list([0, 1, 2])
# list is NOT empty

if_test_list([])
# list is empty

Notez que la chaîne 'False' sera également vraie, car, comme le montre l'exemple ci-dessus, toute chaîne qui n'est pas vide dans la chaîne sera vraie. Pour convertir une chaîne spécifique telle que 'True' ou 'False' en 1,0, utilisez strtobool() dans le module distutils.util.

Spécifier des conditions multiples ou des négations avec des opérateurs logiques (et, ou, pas)

Les opérateurs logiques (et, ou, pas) peuvent être utilisés pour gérer la conjonction logique, la disjonction logique et la négation de plusieurs conditions.

opérateur(Résultat (dans l'expression conditionnelle d'une instruction if).
x and yvrai si x et y sont tous deux vrais
x or yvrai si x ou y est vrai
not xfaux si x est vrai, vrai si x est faux
def if_test_and_not(num):
    if num >= 0 and not num % 2 == 0:
        print('num is positive odd')
    else:
        print('num is NOT positive odd')

if_test_and_not(5)
# num is positive odd

if_test_and_not(10)
# num is NOT positive odd

if_test_and_not(-10)
# num is NOT positive odd

En fait, “x et y” et “x ou y” ne renvoient pas Vrai ou Faux, mais soit x soit y. Tant qu'ils sont utilisés dans des expressions conditionnelles dans des instructions if, il n'y a pas lieu de s'en préoccuper, puisqu'ils évaluent Vrai ou Faux. Voir l'article suivant pour plus de détails.

Il est possible d'utiliser et et ou plus d'une fois.

def if_test_and_not_or(num):
    if num >= 0 and not num % 2 == 0 or num == -10:
        print('num is positive odd or -10')
    else:
        print('num is NOT positive odd or -10')

if_test_and_not_or(5)
# num is positive odd or -10

if_test_and_not_or(10)
# num is NOT positive odd or -10

if_test_and_not_or(-10)
# num is positive odd or -10

Expressions conditionnelles sur les nouvelles lignes et les lignes multiples

Lorsque plusieurs expressions conditionnelles sont utilisées en les reliant par “et” ou “ou” et que chaque ligne devient longue, il est parfois nécessaire de rompre l'expression conditionnelle et de l'écrire sur plusieurs lignes.

Un saut de ligne peut être effectué en utilisant une barre oblique inverse ou en mettant toute la ligne entre parenthèses.

def if_test_and_backslash(num):
    if num >= 0 \
       and not num % 2 == 0:
        print('num is positive odd')
    else:
        print('num is NOT positive odd')

if_test_and_backslash(5)
# num is positive odd

def if_test_and_brackets(num):
    if (num >= 0
        and not num % 2 == 0):
        print('num is positive odd')
    else:
        print('num is NOT positive odd')

if_test_and_brackets(5)
# num is positive odd

Vous pouvez utiliser une barre oblique inverse pour rompre une ligne autant de fois que vous le souhaitez. De même, vous pouvez rompre une ligne autant de fois que vous le souhaitez entre parenthèses. Il n'y a pas de limite d'indentation.

Notez qu'il s'agit d'une technique qui peut être utilisée partout dans le code Python, et pas seulement dans les instructions if.