Conditionnelles


Les instructions conditionnelles sont un autre type de structure de contrôle. Il sagit donc dinstructions permettant daltérer la séquence des instructions exécutées, tout comme les boucles.

Exécuter du code sous certaines conditions

Certains algorithmes requièrent que des instructions ne soient exécutées que sous certaines conditions:

Si <condition> alors:
    <instructions>

Voici un exemple en python: on aimerait écrire un programme simulant le lancer dun dé à 6 faces (équilibré). Le joueur gagne lorsquil tire un 6.

Pour cela, on utilise la fonction randint(a, b) de la librairie standard random qui renvoie un nombre aléatoire (équiréparti) \(n\) tel que \(a \leqslant n \leqslant b\):

from random import randint

n = randint(1, 6)
print("Le nombre tiré est", n)
if n == 6:
    print("Vous avez gagné !")

Ce programme ne donne pas toujours le même résultat (choisir un nombre au hasard rend le programme non déterministe). Au bout de quelques essais, on finit par avoir:

Le nombre tiré est 6
Vous avez gagné !

Code avec une alternative

Le code précédent fonctionne, mais il faut relancer plusieurs fois la cellule (sous jupyter lab) pour voir safficher le message de victoire (lorsquun 6 est tiré).

On aimerait pouvoir afficher un message alternatif en cas de défaite uniquement. Algorithmiquement, cela correspond à:

Si <condition> alors:
    <instructions>
Sinon:
    <instructions>

Python offre une structure correspondant exactement à cela, à la traduction en anglais près:

from random import randint

n = randint(1, 6)
print("Le nombre tiré est", n)
if n == 6:
    print("Vous avez gagné !")
else:
    print("La victoire est proche. Essayez encore !")

Si on na pas de «chance», ce script affichera:

Le nombre tiré est 5
La victoire est proche. Essayez encore !

Code avec plusieurs alternatives

Il nest pas rare de vouloir code léquivalent algorithmique de:

Si <condition1> alors:
    <instructions>
Sinon Si <condition2> alors:
    <instructions>
Sinon Si <condition3> alors:
    <instructions>
Sinon:
    <instructions>

En raison des indentations obligatoires, cela donnerait en python:

if condition1:
    instruction1()
else:
    if condition2:
        instruction2()
    else:
        if condition3:
            instruction3()
        else:
            instruction4()

Le code obtenu est visuellement très laid. Il présente en outre linconvénient majeur quà chaque nouvelle alternative, il y aura une indentation supplémentaire vers la droite, nous forçant à limiter rapidement le nombre dalternatives dans un algorithme.

Pour parer à cet inconvénient, les concepteurs du langage on créé un mot valise correspondant à la concaténation de else et if: elif (à ne surtout pas utiliser dans une copie danglais\(\dots\))

Le programme précédent devient alors:

if condition1:
    instruction1()
elif condition2():
    instruction2()
elif condition3():
    instruction3()
else:
    instruction4()

Lavantage évident de cette nouvelle construction est que, quel que soit le nombre dalternatives, le code restera toujours callé sur la marge de gauche.