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.

Combiner plusieurs conditions : and et or

Parfois, un test simple ne suffit pas. On voudrait par exemple vérifier qu'un nombre est à la fois supérieur à 10 et inférieur à 20. Ou bien qu'une variable vaut soit "rouge" soit "vert".

Vous connaissez déjà ces opérateurs en logique combinatoire sous les noms ET et OU. En Python, ils s'écrivent :

OpérateurLogiqueVrai si...
andETles deux conditions sont vraies
orOUau moins une des deux conditions est vraie
notNONla condition est fausse

Quelques exemples :

age = 16
if age >= 12 and age <= 17 :
print("Tu es adolescent.")
jour = "samedi"
if jour == "samedi" or jour == "dimanche" :
print("C'est le week-end !")

Attention : chaque côté du and ou du or doit être une condition complète. On écrit age >= 12 and age <= 17, et pas age >= 12 and <= 17.

Exercice 11.6

Écrivez un programme qui :

  1. demande un nombre entier à l'utilisateur ;
  2. affiche "Le nombre est dans l'intervalle." si le nombre est compris entre 40 et 60 (bornes incluses), "Le nombre est en dehors." sinon.

Variante avec or : modifiez ensuite le programme pour qu'il affiche "Valeur extrême !" si le nombre est plus petit que 0 ou plus grand que 100, et "Valeur normale." dans les autres cas.

Exercice 11.7 - Crée un jeu !

Pour mettre en pratique de manière plus concrète, on va créer un petit jeu simple Guess My Number :

Le jeu choisi un nombre aléatoire entre 0 et 100, et le joueur doit trouver le nombre le plus rapidement possible. Le jeu répond uniquement par "plus haut" ou " plus bas".

<em>Guess The Number</em> en mode console

Marche à suivre - Phase 1

  1. choisir un nombre aléatoire
  2. Demander un nombre au joueur avec int(input())
  3. Tester la réponse et afficher le message correspondant

Marche à suivre - Phase 2

Cette première phase ne pose qu'une seule fois la question, mais on aimerait la poser TANT QUE le joueur n'a pas trouvé.

  1. Créé une boucle pour poser la question plusieurs fois
  2. On arrête la boucle dès que le joueur a gagné ⇒ Introduire une variable booléenne pour savoir quand le joueur à trouver.

Marche à suivre - Phase 3

Améliorer le jeu. Vous pouvez maintenant rendre le jeu plus agréable avec de meilleurs interactions.

  • Améliorer les messages, comme "Mon nombre est plus grand que 52". Inspirez vous de cette aide.
  • Message d'introduction
  • Compter le nombre de coups et l'afficher à la fin.
  • Donner une limite de coup et arrêter le jeu SI on le dépasse.
  • Détecter les erreurs de saisie : nombre pas dans l'intervalle, saisie de lettres. Aidez-vous de ce tutoriel.

Le meilleur jeu sera présenté durant la journée porte ouverte.

Exercice 11.8

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 est (0, 0) et y == 0) doit être gold.
  2. Les points sur les axes 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.
Damien Cardinaux © 2024 - 2026. Ce site est sous licence CC BY-NC-SA 4.0