UKOnline

Instruction conditionnelle

Maintenant que l'on maitrise les expressions booléennes, on va pouvoir les utiliser pour n'exécuter une partie de programme que si une certaine condition est satisfaite grâce aux instructions conditionnelles.

Instruction if

Commençons avec un exemple qui teste la valeur d'une variable x et affiche une phrase seulement si cette valeur est négative :

L'exécution de ce programme produit la sortie suivante :

x est négatif !
Sa valeur absolue vaut 5

L'instruction if se compose du mot réservé if suivi d'une condition, puis du caractère deux-points (:) et enfin d'une séquence d'instructions à exécuter si la valeur de la condition est vraie. Comme vous l'avez remarqué, pour distinguer les instructions à exécuter si la condition est satisfaite, elles sont indentées, c'est-à-dire précédées de plusieurs espaces. La figure 5 montre l'organigramme correspondant à ce programme.

Instruction if
L'instruction if permet de n'exécuter une partie de programme que si une condition est satisfaite, c'est-à-dire que sa valeur est True.

Toutes les instructions à exécuter si la condition est satisfaite forment un ensemble appelé bloc de code. Elles doivent toutes être indentées de la même manière, par exemple avec une tabulation horizontale ou avec deux espaces, sans quoi une erreur se produira. Si l'on se réfère au guide de style de Guido van Rossum, il faut utiliser quatre espaces par niveau d'indentation.

La condition d'une instruction if est généralement une expression booléenne. Si la valeur de l'expression est True, la condition est satisfaite et le bloc de code du if est exécuté, sinon il est ignoré. Dans tous les cas, le programme continue ensuite son exécution après l'instruction if.

Exécution alternative

En plus d'un bloc de code qui n'est exécuté que si une condition est satisfaite, on peut également définir un second bloc qui ne sera exécuté que dans le cas contraire, c'est-à-dire si la condition n'est pas satisfaite. Une telle exécution alternative se déclare avec le mot réservé else.

Voici un exemple de programme qui utilise une instruction if-else :

Le bloc if sera donc exécuté si la condition placée après le mot réservé if est satisfaite, et sinon, c'est le bloc else qui sera exécuté. Ensuite, le programme continue son exécution après l'instruction if-else. La figure 6 montre l'organigramme correspondant à ce programme.

Instruction if-else
L'instruction if-else permet de n'exécuter une partie de programme que si une condition est vérifiée, et une autre si elle n'est pas vérifiée.

Imbrication d'instructions

Avec ce qu'on vient de voir, on peut donc définir une ou deux branches d'exécution différentes, en fonction de la valeur d'une condition. Comment pourrait-on faire si on désire plus de deux branches ?

Supposons que l'on souhaite écrire un programme qui contrôle la température de l'huile d'un moteur d'une voiture. Tant que celle-ci est sous les $100^\circ$C, tout est normal, si elle est entre $100^\circ$C et $130^\circ$C, il faut émettre un avertissement et enfin si elle dépasse les $130^\circ$C, il faut faire retentir une alarme de danger.

Pour cela, on va utiliser deux instructions if-else que l'on va imbriquer l'une dans l'autre. Ce qu'on va faire, c'est qu'on va utiliser comme contenu du bloc else de la première instruction if-else, une seconde instruction if-else :

La figure 7 montre l'organigramme de ce programme. Les deux instructions if-else y sont encadrées, ce qui fait bien ressortir qu'elles sont imbriquées l'une dans l'autre. La seconde a été imbriquée dans le bloc else, mais on aurait très bien pu la placer dans le bloc if si on voulait. La raison pour laquelle on ne l'a pas fait est que Python propose une écriture simplifiée lorsque l'imbrication se fait dans le bloc else.

Instruction if-elif-else
Une instruction if-else peut être imbriquée dans le bloc else d'une autre, produisant ainsi plusieurs branches d'exécution possibles dont une seule sera exécutée en fonction des valeurs de plusieurs conditions.

Vous aurez remarqué que comme le contenu du bloc else est une instruction if-else, cette dernière doit être indentée. Par conséquent, les instructions des blocs if et else de cette dernière ont un niveau d'indentation double. Si on continue à ajouter d'autres branches, on va se retrouver avec des niveaux d'indentation trop grands. Pour éviter cela, Python propose l'instruction elif (contraction de else if) permettant une écriture simplifiée des instructions conditionnelles à plus de deux branches. L'exemple précédent se réécrit comme suit :

On est maintenant capable d'écrire un programme complet pour chercher les racines d'un trinôme du second degré, dont le code se trouve au listing de la figure 8. Faites attention aux commentaires qui ont été utilisés, ainsi qu'à la mise en page globale du code.

Le fichier trinomial-root.py contient un programme de recherche des racines d'un trinôme du second degré.