14. if, else, if, else,...

Dans l'exercice des haies précédent (vous l'avez essayé, n'est-ce pas ?) il fallait écrire un if/else à l'intérieur d'un autre, parce que nous voulions donner trois choix à Reeborg : finir, avancer ou sauter. Vous avez dû remarqué que cela nous a obligé à indenter de plus en plus le code. Imaginez ce qui se passerait si nous voulions donner à Reeborg 10 choix mutuellement exclusifs ; le code deviendrait difficile à lire. Pour nous aider dans de telles situations, Guido van Rossum, le créateur de Python, a choisi un mot-clé qui représente la combinaison d'une instruction else suivie par une clause if. Ce mot-clé est elif, que l'on peut considérer comme une sorte d'abréviation de else if. Avec ce nouveau mot-clé, le code précédent peut être écrit comme ceci :

def avancer_sauter_ou_terminer():
if on_beeper():
turn_off()
elif front_is_clear():
move()
else:
sauter_une_haie()

Nous voyons mieux maintenant, puisqu'ils sont indentés de la même façon, qu'il y a trois choix possibles. L'instruction suivant else est exécutée seulement si toutes les conditions précédentes sont fausses ; elle n'a pas de condition associée. Si nous avons plus de trois choix, tout ce que nous devrons faire est d'ajouter d'autres instructions elif

def avancer_sauter_ou_terminer():
if on_beeper():
turn_off()
elif front_is_clear():
move()
elif right_is_clear(): # toujours faux pass
else:
sauter_une_haie()

Comme Reeborg suit le mur du bas, right_is_clear() est toujours faux, donc l'instruction pass (qui est l'équivalent en Python de "ne rien faire") est toujours ignorée. Remarquez que si nous avions utilisé left_is_clear() à la place, Reeborg serait resté collé sur place pour toujours dès qu'il serait arrivé à la première haie. Essayez-le vous même !

À votre tour

Essayez d'écrire un programme en utilisant if, elif, else qui fonctionne correctement avec les deux courses de haies précédentes ainsi qu'avec la suivante (dans le fichier hurdles3.wld) :

début haies
précédent Écoute moi... sinon... - début - Pas vrai !? suivant