TP n°11 - Les tests conditionnels

1ère année maturité
Les TP de programmation se font au travers du site web et les exercices sont à sauvegarder sur votre OnDrive dans le dossier de TP.
Tout le contenu vu durant les TP fait partie entière de la matière à connaître lors d'évaluation.
Objectifs
  1. Comprendre et écrire un test conditionnel simple en Python.
  2. Utiliser les structures if, if / else et if / elif / else.
  3. 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.

Logigramme du if simple
Logigramme du test conditionnel simple
Du logigramme au Python

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 boucle while ou for.
Les opérateurs de comparaison

Une condition est une expression qui vaut soit True (vrai), soit False (faux). Pour la construire, on utilise des opérateurs de comparaison :

OpérateurSignificationExemple vrai
==égal à5 == 5
!=différent de3 != 7
<plus petit que2 < 10
<=plus petit ou égal à4 <= 4
>plus grand que9 > 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 :

python
                                        
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.

Exercice 11.1

Écrivez un programme Python (sans Turtle) qui réalise les étapes suivantes :

  1. Demande à l'utilisateur son âge grâce à input(). Pensez à convertir la réponse avec int().
  2. Affiche le message "Tu es majeur." uniquement si l'âge est supérieur ou égal à 18.
  3. Dans tous les cas, affiche à la fin "Au revoir !".
Exercice 11.2

On reprend la spirale carrée de l'exercice 8.4. Voici un rappel du code de base :

python
                                                
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 :

  1. Définissez une variable limite = 150 au début du script.
  2. À 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).
  3. La boucle continue à tourner 50 fois, mais visuellement la spirale s'arrête de grossir.
Spirale qui s'arrête

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 :

Logigramme du if/else
Logigramme du test conditionnel à deux branches
Structure en Python
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 :

python
                                        age = int(input("Quel est ton age ? "))

if age >= 18 :
    print("Tu es majeur.")
else :
    print("Tu es mineur.")
                                        
                                    
Rappel de l'opérateur modulo %

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.

Exercice 11.3

Cette fois, on va utiliser numinput() du module turtle, qui ouvre une jolie boîte de dialogue pour saisir un nombre.

python
                                                from turtle import *

nb = numinput("Test", "Donne un nombre entier :")
nb = int(nb)
                                                
                                            

Écrivez un programme qui :

  1. demande un nombre entier à l'utilisateur via numinput() ;
  2. affiche dans la console "X est pair." ou "X est impair." selon le cas, en utilisant un test if / else et l'opérateur % ;
  3. 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.

Exercice 11.4

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 :

  1. Tirez un nombre aléatoire entre 0 et 99 avec randrange(0, 100).
  2. Définissez une variable seuil (par exemple seuil = 70).
  3. Avec un if / else : si le tirage est inférieur au seuil, choisissez "black", sinon "white".
  4. Adaptez le code de l'exercice 10.2 pour utiliser ce nouveau choix de couleur.
Code-barre avec 70% de noir
Rendu avec 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.

Logigramme du if/elif/else
Logigramme avec deux conditions et un cas par défaut
Structure en Python
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 elif que nécessaire.
  • Le else final 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.
Exercice 11.5

Écrivez un programme qui :

  1. demande à l'utilisateur sa note (un nombre décimal entre 1 et 6) ;
  2. 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
  3. 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.

Exercice 11.6

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 :

Mosaïque colorée

Voici une trame pour démarrer (à compléter !) :

python
                                                
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 :

  1. Le point au centre exact (x == 0 et y == 0) doit être gold.
  2. Les points sur les axes (x == 0 ou y == 0) doivent être blancs.
  3. 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 ?

Damien Cardinaux © 2024 - 2026. Ce site est sous licence CC BY-NC-SA 4.0