Si les programmes étaient exécutés en suivant les instructions une à une, de la première à la dernière, sans pouvoir revenir sur leurs pas, ils ne permettraient pas de faire grand chose. C'est pour cette raison qu'il existe des structures de code (appelées structures conditionnelles) qui permettent aux instructions d'emprunter différents chemins. Prenons l'exemple d'une programme de calcul très simple qui permet à un utilisateur de choisir l'opération mathématique à effectuer.
a = input("Saisissez le premier nombre : ") b = input("Saisissez le deuxième nombre : ") op = input("Choisissez l'opérateur (+, -, *, /) ") if op == '+': somme = int(a) + int(b) print("La somme des nombres vaut " + str(somme)) elif op == '-': soustraction = int(a) - int(b) print("Leur différence vaut " + str(soustraction)) elif op == '*': prod = int(a) * int(b) print("Leur produit vaut " + str(prod)) elif op == '/': quot = int(a) / int(b) print("Leur quotient vaut " + str(quot)) else: print("L'opérateur choisi n'est pas reconnu.")
Là encore, l'exemple est plutôt dense. Analysons les différentes partie une par une.
Tout d'abord, les trois premières instructions permettent au programme de demander les valeurs des opérandes et l'opérateur à utiliser. Jusqu'ici, rien de nouveau.
Ensuite, on évalue les différentes possibilités et on calcule ce qu'il faut pour chacun des cas. Le mot-clé if
(qui signifie « si » en anglais) introduit une expression conditionnelle : il s'agit d'un fragment de code qui ne sera exécuté que si la condition indiquée est vraie. La structure d'un tel bloc conditionnel est :
if [condition]: [faire quelque chose]
condition
peut être n'importe quelle expression qui peut être évaluée à True
ou False
. On a souvent des conditions qui sont des comparaisons entre plusieurs quantités. Regardons comment fonctionnent ces comparaisons.
Effectuer des comparaisons
Plusieurs opérateurs peuvent être utilisés afin d'effectuer des comparaisons. Par exemple, on peut utiliser l'opérateur d'égalité symbolisé par ==
. Lancez un interpréteur puis testez quelques instructions.
>>> 5 == 5 True >>> 5 == 4 False >>> 5 == 'coucou' False >>> 'coucou' == 'coucou' True
- Dans le premier cas, 5 est bien égal à 5, l'interpréteur indique alors que la comparaison est vraie (
True
signifie vrai en anglais). - Dans le deuxième cas, 4 est différent de 5 et l'interpréteur indique alors que la comparaison est fausse (
False
signifie faux en anglais). - Un nombre n'est pas la même chose qu'une chaîne de caractères, le résultat du troisième test est donc
False
. - Enfin, les deux chaînes testées contiennent les mêmes caractères dans le même ordre : ce sont donc les mêmes et la comparaison renvoie
True
.
Voici une liste des opérateurs de comparaison qui sont disponibles en Python :
== | L'opérande gauche est égal à l'opérande droit. |
!= | L'opérande gauche est différent de l'opérande droit. |
> | L'opérande gauche est strictement supérieur à l'opérande droit. |
>= | L'opérande gauche est supérieur ou égal à l'opérande droit. |
< | L'opérande gauche est strictement inférieur à l'opérande droit. |
<= | L'opérande gauche est inférieur ou égal à l'opérande droit. |
Retour aux calculs
Revenons à la structure générale d'une instruction if
:
if [condition]: [faire quelque chose]
Nous venons de décrire la partie sur la condition, passons à la suite. Après la condition, on place deux points (:) et on passe à la ligne. Sur cette ligne, on « indente » en ajoutant un certain nombre d'espaces (ici 4). On utilisera ce nombre d'espaces pour chacune des instructions qui se situent « sous » cette condition. Ainsi, tout ce qui sera indenté avec 4 espaces sera exécuté si la condition précédente est vérifiée. Illustrons ce principe avec un exemple :
if 5 == 5: print("5 est égal à 5") print("Je le savais déjà") print("J'ai appris quelque chose aujourd'hui :)")
Aussi bête que cet exemple puisse paraître, les deux premières instructions print
ne sont exécutées que si la condition (5 == 5
) vaut True
. En revanche, la dernière instruction print
sera exécuté quoiqu'il arrive. Prenons un autre exemple, opposé :
if 5 != 5: print("5 est égal à 5") print("Ces lignes ne seront pas affichées") print("Celle-ci sera affichée quoiqu'il arrive :)")
Seule la dernière ligne sera affichée car elle n'est pas indentée « sous » l'instruction if
.
Pour revenir à la description de notre programme de calcul : on a demandé l'opérateur à utiliser. Si l'utilisateur a saisi '+
', la condition de la première instruction if
sera vérifiée et les deux lignes qui suivent seront exécutées (la première effectue l'addition et la suivante affiche le résultat). Sinon, elles auront été ignorées.
Dans ce cas particuliers, les différents choix sont mutuellement exclusifs (on ne peut pas avoir saisi "+" et "*" avec un seul caractère) et on aurait pu utiliser une série d'instructions if
pour notre programme. Mais il arrive parfois qu'on doive déterminer plus finement le résultat d'un enchaînement de conditions ou qu'une exécute une instruction par défaut (ici celle qui est exécutée quand l'opérateur est inconnu). Pour cela, Python fournit deux autres instructions : elif
et else
.
elif
est utilisé lorsque la condition du précédent if
n'est pas vérifié et qu'on souhaite tester une autre condition. Cette instruction permet d'indiquer un autre cas, correspondant à une seconde condition si la première n'est pas vérifiée. Si cette deuxième condition est vérifiée mais que la première ne l'est pas, ce seront les instructions indentées sous elif
qui seront exécutées. elif
a la même structure qu'une instruction if
mais elle doit être précédé par une bloc if
afin d'être utilisée.
Enfin, else
permet de dire : « si aucune des conditions précédentes n'a été vérifiée, on exécutera ces instructions ». Étant donné que cette instruction traduit des éléments à exécuter par défaut, elle doit être placée à la fin de la chaîne conditionnelle (autrement dit, elle ne peut pas être suivie par un autre elif
ou un autre else
). Une instruction else
peut tout à fait être utilisée après une instruction if
s'il n'y a pas lieu d'utiliser elif
. Par exemple, pour effectuer une simple vérification d'âge, on pourra utiliser le code suivant :
age = input("Quel âge avez-vous ?") if int(age) > 18: print("Ok, vous pouvez entrer") else: print("Revenez quand vous serez plus grand !")