TP n°11 - Les tests conditionnels
1ère année maturité
Tout le contenu vu durant les TP fait partie entière de la matière à connaître lors d'évaluation.
Objectifs
- Comprendre et écrire un test conditionnel simple en Python.
- Utiliser les structures
if,if / elseetif / elif / else. - Faire le lien entre un logigramme, du pseudo-code et du code Python.
Jusqu'ici, vos programmes exécutent toujours les mêmes instructions, dans le même ordre. Mais souvent, on aimerait que le programme prenne une décision : afficher un message uniquement si l'utilisateur est majeur, choisir une couleur différente selon une condition, arrêter une boucle quand un seuil est atteint...
Vous avez déjà rencontré cette idée à plusieurs reprises :
- en logique combinatoire avec les portes ET, OU, NON ;
- en logigramme avec le losange de décision ;
- en pseudo-code avec les mots-clés SI ... ALORS ... SINON ;
- dans Excel avec la fonction
SI().
Aujourd'hui, on transpose tout ça en Python.
Un test conditionnel permet à votre programme d'exécuter un bloc d'instructions uniquement si une condition est vraie. Sinon, le programme passe à la suite sans rien faire.
En logigramme, cela correspond au losange de décision avec une seule branche d'action.
En pseudo-code, on écrirait :
SI condition ALORS
bloc d'instructions
FIN SI
En Python, la traduction est presque identique :
if condition :
bloc d'instructions
Remarquez les points suivants :
- le mot-clé est
if(= si en anglais) ; - la condition est suivie de deux-points
:; - les instructions à exécuter sont décalées (indentées) sous le
if, exactement comme dans une bouclewhileoufor.
Une condition est une expression qui vaut soit True (vrai), soit False (faux). Pour la construire, on utilise des opérateurs de comparaison :
| Opérateur | Signification | Exemple vrai |
|---|---|---|
== | égal à | 5 == 5 |
!= | différent de | 3 != 7 |
< | plus petit que | 2 < 10 |
<= | plus petit ou égal à | 4 <= 4 |
> | plus grand que | 9 > 1 |
>= | plus grand ou égal à | 6 >= 6 |
Attention : ne pas confondre = (qui affecte une valeur à une variable) et == (qui compare deux valeurs).
Voici un premier exemple complet à tester :
temperature = 28
if temperature > 25 :
print("Il fait chaud !")
print("Fin du programme")
Testez ce code, puis modifiez la valeur de temperature pour observer ce qui change.
Écrivez un programme Python (sans Turtle) qui réalise les étapes suivantes :
- Demande à l'utilisateur son âge grâce à
input(). Pensez à convertir la réponse avecint(). - Affiche le message "Tu es majeur." uniquement si l'âge est supérieur ou égal à 18.
- Dans tous les cas, affiche à la fin "Au revoir !".
On reprend la spirale carrée de l'exercice 8.4. Voici un rappel du code de base :
from turtle import *
speed(0)
setheading(0)
taille = 10
suppl = 5
i = 0
while i < 50 :
forward(taille)
right(90)
taille = taille + suppl
i = i + 1
Modifiez ce code pour que la spirale arrête de grandir dès que la taille du segment dépasse une limite. Pour cela :
- Définissez une variable
limite = 150au début du script. - À l'intérieur de la boucle, n'exécutez les instructions de dessin que si la taille est inférieure à la limite (utilisez un
if). - La boucle continue à tourner 50 fois, mais visuellement la spirale s'arrête de grossir.
Aller plus loin : que se passe-t-il si vous changez la valeur de limite ? Et si vous augmentez suppl ?
Très souvent, on veut faire une chose si la condition est vraie, et autre chose sinon. C'est le rôle du mot-clé else (= sinon en anglais).
Le logigramme a maintenant deux branches d'action, qui se rejoignent ensuite :
if condition :
bloc 1
else :
bloc 2
Le programme exécute soit le bloc 1, soit le bloc 2, jamais les deux.
Attention : il n'y a pas de condition après else, juste les deux-points.
Voici un exemple :
age = int(input("Quel est ton age ? "))
if age >= 18 :
print("Tu es majeur.")
else :
print("Tu es mineur.")
%
L'opérateur % renvoie le reste de la division entière de deux nombres.
print(10 % 3)
print(8 % 2)
print(15 % 5)
# Résultat# 1
# 0
# 0
Cet opérateur est très utile combiné à un test conditionnel : nb % 2 == 0 est vrai si et seulement si nb est pair. De même, nb % 3 == 0 teste si nb est un multiple de 3.
Cette fois, on va utiliser numinput() du module turtle, qui ouvre une jolie boîte de dialogue pour saisir un nombre.
from turtle import *
nb = numinput("Test", "Donne un nombre entier :")
nb = int(nb)
Écrivez un programme qui :
- demande un nombre entier à l'utilisateur via
numinput(); - affiche dans la console "X est pair." ou "X est impair." selon le cas, en utilisant un test
if / elseet l'opérateur%; - Variante : ajoute un second test pour annoncer si le nombre est un multiple de 3.
À toi de choisir : dans tes prochains scripts, tu pourras utiliser soit input() (saisie dans la console), soit numinput() (boîte de dialogue Turtle), selon le contexte.
On reprend le code-barre aléatoire de l'exercice 10.2. Dans cette version, vous utilisiez probablement la fonction choice() pour tirer une couleur au hasard parmi ["black", "white"].
L'inconvénient de choice() : les deux couleurs ont exactement 50% de chance de sortir. Pas moyen de favoriser le noir par exemple.
Avec un test conditionnel, on peut faire bien mieux :
- Tirez un nombre aléatoire entre 0 et 99 avec
randrange(0, 100). - Définissez une variable
seuil(par exempleseuil = 70). - Avec un
if / else: si le tirage est inférieur au seuil, choisissez"black", sinon"white". - Adaptez le code de l'exercice 10.2 pour utiliser ce nouveau choix de couleur.
seuil = 70 (~70% de noir)Aller plus loin : testez avec seuil = 20, puis seuil = 90. Quel est l'effet visuel ? Vous venez de découvrir comment biaiser un tirage aléatoire — c'est exactement comme cela que fonctionnent beaucoup d'algorithmes de génération de contenu.
Quand on a plus de deux cas à distinguer, on ajoute des branches intermédiaires avec le mot-clé elif (contraction de else if, soit "sinon si").
Le logigramme correspondant teste les conditions les unes après les autres : dès qu'une condition est vraie, le bloc associé est exécuté et toutes les autres branches sont ignorées.
if condition_1 :
bloc 1
elif condition_2 :
bloc 2
elif condition_n :
bloc n
else :
bloc par défaut
- On peut mettre autant de
elifque nécessaire. - Le
elsefinal est optionnel. Il s'exécute uniquement si aucune des conditions précédentes n'était vraie. - Les conditions sont testées dans l'ordre. Dès qu'une est vraie, les autres ne sont même pas évaluées.
Écrivez un programme qui :
- demande à l'utilisateur sa note (un nombre décimal entre 1 et 6) ;
- détermine la mention selon le barème suivant :
- note < 4 → insuffisant
- 4 ≤ note < 4.5 → passable
- 4.5 ≤ note < 5 → bien
- note ≥ 5 → très bien
- affiche la mention dans la console.
Astuce : remarquez que pour le 2ème cas, on n'a pas besoin d'écrire note >= 4 and note < 4.5. Pourquoi ? Parce que si on arrive sur le elif, c'est que la condition précédente (note < 4) était déjà fausse. Le test note >= 4 est donc déjà garanti.
Challenge final !
On reprend le quadrillage de points de l'exercice 10.3 avec les deux boucles for imbriquées. Cette fois, la couleur de chaque point va dépendre de sa position grâce à un if / elif / else.
L'objectif est de produire la mosaïque suivante :
Voici une trame pour démarrer (à compléter !) :
from turtle import *
speed(0); tracer(0); hideturtle()
bgcolor("black")
taille = 11
ecart = 40
diametre = 25
for i in range(taille) :
for j in range(taille) :
x = (i - taille // 2) * ecart
y = (j - taille // 2) * ecart
# A toi de remplir les conditions et les couleurs ci-dessous !
# Tu auras besoin d'au moins 6 branches (centre + axes + 4 quadrants).
# Astuce : teste d'abord le centre, puis les axes, puis les quadrants.
if ... :
couleur = ...
elif ... :
couleur = ...
elif ... :
couleur = ...
elif ... :
couleur = ...
elif ... :
couleur = ...
else :
couleur = ...
penup(); goto(x, y)
dot(diametre, couleur)
update()
Règles à respecter :
- Le point au centre exact (
x == 0ety == 0) doit être gold. - Les points sur les axes (
x == 0ouy == 0) doivent être blancs. - Les 4 quadrants doivent prendre 4 couleurs différentes : salmon en haut-gauche, cyan en haut-droite, violet en bas-gauche, yellow en bas-droite.
Astuce : dans Python, on peut combiner deux conditions avec le mot-clé and (déjà vu en logique). Par exemple : if x < 0 and y > 0 : teste à la fois que x est négatif et que y est positif.
Aller plus loin (facultatif) : faites varier taille (par exemple à 21) et ecart pour obtenir des mosaïques plus denses. Que se passe-t-il avec une taille paire ?