2 - Instructions conditionnelles
I. La syntaxe par l'exempleâïž
Juste un if
Important
Prenez le temps de lire les commentaires !
Cliquez sur les +
Le caractĂšre
:est obligatoire aprĂšsif,elif,else,foretwhile. Il provoque l'indentation automatique du bloc d'instruction qui suit.
Tester :
if / else
Important
Prenez le temps de lire les commentaires !
Cliquez sur les +
note = float(input("Saisir votre note : "))
if note >= 10: # (1)
print("reçu")
else: # (2)
print("refusé")
-
Le caractĂšre
:est obligatoire aprĂšsif,elif,else,foretwhile. Il provoque l'indentation automatique du bloc d'instruction qui suit. -
Le caractĂšre
:est obligatoire aprĂšsif,elif,else,foretwhile. Il provoque l'indentation automatique du bloc d'instruction qui suit.
Tester :
# Tests (insensible Ă la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
if / elif / else
Important
Prenez le temps de lire les commentaires !
Cliquez sur les +
note = float(input("Saisir votre note : "))
if note >= 16:
print("TB") # (2)
elif note >= 14:
print("B") # (4)
elif note >= 12:
print("AB") # (6)
elif note >= 10:
print("reçu") # (7)
else: # (8)
print("refusé") # (9)
-
Le caractĂšre
:est obligatoire aprĂšsif,elif,else,foretwhile. Il provoque l'indentation automatique du bloc d'instruction qui suit. -
Si on est arrivé là , cela signifie que
note†16 -
elifsignifie sinon si. -
Si on est arrivé là , cela signifie que
note< 16 etnoteâ„ 14 :
14 â€note< 16 -
Le caractĂšre
:est obligatoire aprĂšsif,elif,else,foretwhile. Il provoque l'indentation automatique du bloc d'instruction qui suit. -
Si on est arrivé là , cela signifie que
note< 14 etnoteâ„ 12 :
12 â€note< 14 -
Si on est arrivé là , cela signifie que
note< 12 etnoteâ„ 10 :
10 â€note< 12 -
Le caractĂšre
:est obligatoire aprĂšsif,elif,else,foretwhile. Il provoque l'indentation automatique du bloc d'instruction qui suit. -
Si on est arrivé là , cela signifie que
note< 10 . On n'écrit jamais de condition aprÚselse
Tester :
# Tests (insensible Ă la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
if ... et if
Important
Prenez le temps de lire les commentaires !
Cliquez sur les +
note = float(input("Saisir votre note : "))
if note == 20: # (1)
print("Parfait !")
if note != 0: # (2)
print("Ce n'est pas nul !")
# Il n'est pas obligatoire d'avoir un `else`
-
Il faut deux symboles
==pour tester l'égalité. Un seul symbole=réalise une affectation. -
Différent s'écrit
!=
Tester :
Vous pourrez tester les saisies de 0, puis de 20, puis de 10 par exemple. Que se passe-t-il ?
# Tests (insensible Ă la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
Solution
Si on saisit 0 ... il ne se passe rien ...
Lisez le code, c'est normal ! đ
Si on saisit 20, "on rentre" dans les deux tests if, et on obtient les deux affichages.
II. Cours/TD ifâïž
1. Avec des trianglesâïž
Le triangle est-il rectangle?
VoilĂ la question que l'on se pose : le triangle ci-dessous est-il rectangle ?

Tester ci-dessous. Que se passe-t-il ? Essayez ensuite de modifier la valeur de BC, que se passe t'il ?
# Tests (insensible Ă la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
Solution
Bien sûr ce code affiche que ABC est triangle, puisque 25 est bien égal a 9 + 16.
\(AC^2 == AB^2 + BC^2\) s'évalue à True
**Notez bien le == : Ce n'est pas une faute de frappe, on a vraiment mis deux fois le signe =.
đ En python :
- a = 1 est une affectation (a prend la valeur 1)
- a == 1 est une comparaison utilisant l'opérateur comparatif ==. Cet opérateur permet de tester une égalité : (ici la proposition est : a = 1 ?
- a == 1 peut prendre deux valeurs : Vrai ou Faux. En Python (comme dans la majorité des langages de programmation) c'est True ou False. C'est donc une proposition booléenne.
La structure de cette instruction conditionnelle est :
En changeant la valeur de BC, le test d'entrée n'est plus valide, donc il ne se passe rien !
L'indentation
Afin de mieux visualiser le fonctionnement par bloc, nous allons ajouter quelques instructions dans notre code.
Tester ci-dessous. Que se passe-t-il ?
# Tests (insensible Ă la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
Solution

đ On observe donc qu'il n'y a pas d'affichage dans le cas oĂč le triangle n'est pas rectangle en B.
2. Pile ou faceâïž
La fonction choice()
Dans cet exercice, nous allons utiliser : la fonction choice()
Cette fonction est disponible dans la librairie random.
Nous aurons l'occasion de reparler de tout ceci plus tard.
Pour le moment nous allons juste utiliser le petit code suivant.
Vous devez l'exécuter plusieurs fois de suite.
# Tests (insensible Ă la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
Jeu de Pile ou Face
Le jeu est le suivant :
On simule avec le code précédant le lancer de piÚce.
- Si on tombe sur
"pile"on gagne 1 euro. - Si on tombe sur
"face"on perd 1 euro.
Compléter le code ci-dessous pour qu'il s'affiche "gagné 1 euro" ou "perdu 1 euro" en respectant la rÚgle du jeu.
# Tests (insensible Ă la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
Jeu de Pile ou Face avec deux lancers
Le jeu est maintenant le suivant
On simule avec le lancer deux piĂšces.
* Si les deux piĂšces tombent toutes les deux du mĂȘme cĂŽtĂ© on gagne 1 euro.
* Si une tombe sur "pile" et l'autre sur "face" on perd 1 euro.
Le symbole différent
Rappel : en Python le symbole \(\neq\) s'écrit !=
Compléter le code ci-dessous pour qu'il s'affiche "gagné 1 euro" ou "perdu 1 euro" en respectant la rÚgle du jeu.
đ Vous devrez l'exĂ©cuter plusieurs fois de suite pour bien observer les diffĂ©rentes possibilitĂ©s.
# Tests (insensible Ă la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
III. Cours/TD if ... elseâïž
if ...else
đNous pouvons simplifier le code de l'exercice 1 ainsi :
tester et comprendre
1. tester un lancer pile
# Tests (insensible Ă la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
2. tester un lancer face
# Tests (insensible Ă la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
Solution
VoiĂ ce qu'il se passe :

Jeu de Pile ou Face avec deux lancers et un else
Le jeu est maintenant le suivant
On simule avec le lancer deux piĂšces.
* Si les deux piĂšces tombent toutes les deux du mĂȘme cĂŽtĂ© on gagne 1 euro.
* Si une tombe sur "pile" et l'autre sur "face" on perd 1 euro.
Contrainte
Utiliser obligatoirement else
# Tests (insensible Ă la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
IV. Cours/TD if ... elif...elseâïž
La struction if ... else ... que nous venons de voir est souvent utilisée, quand on doit faire quelques chose si une condition est vraie, et autre chose sinon (si elle est fausse donc !).
Mais il y a aussi de nombreuses situations oĂč on peut avoir plusieurs cas. On pourra alors ajouter une condition intermĂ©diaire : sinon si , qui s'Ă©crira 'elif' en python
Tarif cinema
Dans un cinéma on a les tarifs suivants pour une place de cinéma:
- gratuit pour les moins de 1 an - 5⏠entre 1 et 6 ans - 8⏠entre 7 et 14ans - 11⏠pour les autres
On note dans la variable age, l'age d'une personne qui sera déterminé de maniÚre aléatoire. Modifier l'algorithme pour prendre en compte le tarif des jeunes entre 7 et 14 ans.
# Tests (insensible Ă la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
Solution
```python title=''
On importe la fonction randint du module random from random import randint
On prend un age au hasard entre 0 et 40 : age = randint(0, 40)
if age < 1 : print(0) elif 1<=age <= 6 : print(5) elif 7<=age <= 14 : print(5) else : print(11)
```
Résumé
Le code est donc trĂšs explicite :
Si 1ere condition :
bloc si cette condition est vraie
Sinon si 2Ăšme condition :
bloc si cette condition est vraie
Sinon si 3Ăšme condition :
bloc si cette condition est vraie
Sinon : # <-- sinon ici signifie : si aucune des conditions qui précÚdent n'est vraie
bloc si toutes les conditions précédentes sont fausse
A savoir
- Il peut y avoir autant de elif qu'on a de cas Ă tester
- Le
elseest facultatif (parfois, on regarde plusieurs cas, mais si aucun n'est vrai, on ne fait rien et on n' a donc pas besoin deelse) - une seule condition sera exécutée (celle qui est vraie ou celle du
else, s'il y a unelse) - MĂȘme si 2 conditions sont vraies ?
oui ! voir les exemples ci dessous...
Pile ou face avec conditions non mutuellement exclusives
Modifions le jeu : on lance 2 piÚces, et si au moins une des deux est pile on a gagné, sinon on a perdu.
Tester ci-dessous. Qu'en pensez-vous ?
# Tests (insensible Ă la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
Solution
Nous sommes d'accord, les 2 conditions lancer_1 == "pile" et lancer_2 == "pile"sont vraies toutes les deux ...
mais si on a gagné à la 1ere piÚce, inutile de vérifier si on a encore gagné à la seconde !
đ Dans une structure if.. elif... else... on arrĂȘte les tests dĂšs qu'une des conditions est vraie.
-
Dans l'exemple des triangles les conditions sont mutuellement exclusives :
Un triangle ne peut pas ĂȘtre rectangle et A et en mĂȘme temps en B ou en C. Donc s'il est rectangle en A, inutile de regarder s'il est rectangle en B. DĂšs qu'un cas est vrai, on peut se passer de regarder les autres. -
dans l'exemple des lancers de piĂšces les conditions ne sont pas mutuellement exclusives :
En gĂ©nĂ©ral, on utilise les structures elif avec des cas disjoint, c'est Ă dire pour des conditions mutuellement exclusives, ou pour le dire plus simplement, quand il est impossible que 2 conditions soient vraies en mĂȘme temps. Mais ce n'est pas obligĂ©, l'exemple des 2 piĂšces montre un tel exemple.
III. Exercicesâïž
Exercice 1 : la cible - version 1
Bob a trouvé un jeu de fléchette trÚs simple : il lance une flechette sur le plateau et il gagne 1 point si la flechette atteint la croix rouge. Le plateau est représenté ci-dessous :

Bob a programmé le jeu sur son ordinateur.
Dans cet exercice, nous allons utiliser une nouvelle fonction : la fonction randint()
Cette fonction permet d'obtenir un nombre aléatoire. Par exemple, randint(1, 6) est un nombre aléatoire compris entre 1 et 6, inclus.
Pour importer la fonction randint() de la librairie random (c'est-a-dire pouvoir l'utiliser dans notre code) nous ajoutons au début de notre code :
1. Compléter le code ci-dessous :
# Tests (insensible Ă la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
Solution
# On importe la fonction randint du module random
from random import randint
# Bob lance sa flechette, elle atteint une case au hasard du plateau :
numero_ligne = randint(0, 4)
numero_colonne = randint(0, 4)
print("La flechette atteint la case située : Ligne :", numero_ligne,"et Colonne :", numero_colonne)
# a-t-il gagné ?
if numero_ligne == 2 :
print("Bob a gagné")
elif numero_colonne == 2 :
print("Bob a gagné")
else :
print("Bob Ă perdu")
2. Si la condition numero_ligne == 2 est vĂ©rifiĂ©e, est ce que la seconde condition, numero_colonne == 2 peut aussi ĂȘtre vĂ©rifiĂ©e ?
Solution
Oui, s'il atteint la case (2, 2) les 2 conditions seront vérifiées. (ici les conditions ne sont pas mutuellement exclusives)
3. Est-ce que le programme donne toujours le bon résultat ?
Solution
Le programme donne toujours le bon résultat :
- Lorsque la 1Úre condition est vérifiée, il est inutile de vérifier la 2Úme condition, car de toutes façons, il a gagné.
- Si la 1Úre n'est pas vérifiée, mais la deuxiÚme oui, il a aussi gagné.
- Si aucune des deux n'est vérifiée, alors il a perdu.
4. Alice propose un autre code :
if numero_ligne == 2 :
print("Bob a gagné")
if numero_colonne == 2 :
print("Bob a gagné")
if numero_ligne != 2 and numero_colonne != 2 :
print("Bob a perdu")
Solution
Le code d'Alice fonctionne aussi bien que le code de Bob. Toutefois :
- Il faudra toujours évaluer 3 expressions booléennes
- Tandis que le code de Bob n'en évalue qu'une si on a joué la ligne 2, et deux sinon.
En terme de lisibilité, le code d'Alice est plus difficile à lire.
Exercice 2 : la cible - version 2
Bob modifié les rÚgles du jeu. Voyez le nouveau plateau de jeu ci-dessous. La case rouge rapporte 100 points, les cases orange rapportent 50 points, les cases blanches ne rapportent aucun point.

Complétez ci-dessous pour que le code affiche le nombre de points gagnés
# Tests (insensible Ă la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
Solution
from random import randint
# Bob lance sa flechette, elle atteint une case au hasard du plateau :
numero_ligne = randint(0, 4)
numero_colonne = randint(0, 4)
print("La flechette atteint la case située : Ligne :", numero_ligne,"et Colonne :",numero_colonne)
if numero_ligne == 2 and numero_colonne == 2:
print("100 points")
elif numero_ligne == 2 or numero_colonne == 2:
print("50 points")
else :
print("0 points")
IV. Bilanâïž
Attention Ă ne pas oublier les deux points et l'indentation.
La syntaxe de if :
đ Attention, l'instructions else n'est pas du tout obligatoire (Voir les exemples ci-dessus).
-
Avec seulement
if -
Avec
ifetelse
La syntaxe de if ... elif ... else :
đ Attention, l'instructions else n'est pas du tout obligatoire (Voir les exemples ci-dessus).
-
Avec seulement
ifetelif -
Avec
if...elif...else
V. Exercicesâïž
Exercice 1 papier
Que vaut la valeur finale de b ?
- 13
- 9
- 19
- 23
13Faux car 10 > 5. La ligne 4 et donc exécutée.9
1923Faux car Ă la ligne 4 on a une nouvelle affectation de b qui ne respecte plus la condition du if de la ligne 5.
Exercice 2 'papier'
Que vaut la valeur finale de b ?
- 22
- 21
- 13
- 14
22
21Faux car la ligne 4 n'est pas exécutée13Faux car la ligne 4 n'est pas exécutée14Faux car à la ligne 6 est exécutée
Exercice 3 'papier'
Que vaut la valeur finale de b ?
- 24
- 17
- 20
- 27
24
17Faux car la ligne 6 est aussi exécutée20Faux car la ligne 4 et la ligne 6 sont exécutées.27Faux car à la ligne 4 est exécutée
Exercice 4 'papier'
| Python | |
|---|---|
Que vaut la valeur finale de a ?
- 3
- 16
- 1
- 12
3
16Faux car la ligne 6 n'est pas exécutée.1Faux car la ligne 10 n'est pas exécutée.12Faux car on cherche la valeur finale de a.
Exercice 5 'papier'
| Python | |
|---|---|
Que vaut la valeur finale de a ?
- -10
- -6
- 0
- -12
-10La ligne 6 est exécutée, mais on demande a.-6. La ligne 6 et la ligne 10 sont exécutée. On demande a.
0Faux car la ligne 8 n'est pas exécutée.-12
Exercice 6 'papier'
| Python | |
|---|---|
Que vaut la valeur finale de a ?
- 10
- -8
- 18
- -6
-10-8. La ligne 10 n'est pas exécutée.18Faux car la ligne 6 est exécutée mais on demande a.-6. La ligne 6 et la ligne 8 sont exécutées. On demande a.
Exercice 7 'papier'
| Python | |
|---|---|
Que vaut la valeur finale de a ?
- -8
- 7
- -14
- 13
-87 . Les lignes 4 et 10 sont exécutées.
-14Faux car la ligne 4 est exécutée mais on demande a.13Faux car la ligne 8 n'est pas exécutée.
Exercice 8 'papier'
Que vaut la valeur finale de d ?
Solution
-2
# Tests(insensible Ă la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)