Les conditionnelles

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 d’un dé à 6 faces (équilibré). Le joueur gagne lorsqu’il 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
Vou avez gagné !

Code avec une alternative

Le code précédent fonctionne, mais il faut relancer plusieurs fois la cellule pour voir s’afficher le message de victoire (lorsqu’un 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 n’a pas de «chance», ce script affichera:

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

Code avec plusieurs alternatives

Il n’est 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 l’inconvénient majeur qu'à chaque nouvelle alternative, il y aura une indentation supplémentaire vers la droite.

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 d’anglais\(\dots\))

Le programme précédent devient alors:

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

L’avantage évident de cette nouvelle construction est que, quel que soit le nombre d’alternatives, le code restera toujours callé sur la marge de gauche.