Ch. 01 · Leçon 2
Structures conditionnelles : Si…Sinon, Selon
Ce que vous saurez faire
- Identifier les opérateurs de comparaison et les opérateurs logiques
- Écrire une structure Si…Sinon en notation algorithmique et en Python 3
- Comparer les structures Si imbriquées avec la structure Selon
- Concevoir un algorithme combinant plusieurs conditions pour résoudre un problème de décision
Plan de cours
Quand le programme doit choisir : trois portes, une seule à ouvrir
Sans conditions, un programme exécute toujours les mêmes instructions dans le même ordre. Cette leçon vous donne la capacité de faire varier l'exécution selon les données rencontrées — c'est la naissance de l'intelligence algorithmique.
Concepts clés
- Expression booléenne — toute condition s'évalue à vrai ou faux.
- Si…Sinon — exécute deux branches mutuellement exclusives.
- Si…Sinon Si… — chaîne plusieurs cas hiérarchisés.
- Selon — choix multiple sur une valeur unique.
- Opérateurs logiques — ET, OU, NON combinent plusieurs conditions.
Avant de commencer — qu'est-ce que vous savez déjà ?
- Q1. Quelle valeur prend l'expression
(5 > 3) ET (2 < 1)? - Q2. Si
note = 12, que retourne l'expressionnote >= 10? - Q3. Pouvez-vous citer le mot-clé Python pour « sinon si » ?
Si vous bloquez sur Q1 ou Q2, revoyez la leçon 1.1 (section types booléens). Q3 : la réponse arrive section 1.3.
1. Le contenu du cours
1.1 Analogie : le portier sélectif
Imaginez un portier à l'entrée d'un concert. À chaque visiteur, il pose une question (la condition) :
- Si vous avez un billet → vous entrez (branche alors),
- Sinon → vous restez dehors (branche sinon).
Une structure conditionnelle, c'est exactement ce portier dans votre code : une question, deux issues possibles.
1.2 Les expressions booléennes
Opérateurs de comparaison
| Analyse | Python 3 | Signification |
|---|---|---|
= | == | égal à |
≠ | != | différent de |
< | < | strictement inférieur à |
≤ | <= | inférieur ou égal à |
> | > | strictement supérieur à |
≥ | >= | supérieur ou égal à |
Opérateurs logiques
| Analyse | Python 3 | Table de vérité |
|---|---|---|
ET | and | vrai uniquement si les deux opérandes sont vrais |
OU | or | vrai si au moins un opérande est vrai |
NON | not | inverse la valeur (vrai → faux et inversement) |
1.3 La structure Si…Alors…Sinon
Forme algorithmique
Si condition Alors
instructions_alors
Sinon
instructions_sinon
FinSi
Forme Python
if condition:
instructions_alors
else:
instructions_sinon
Exemple — Tester la majorité
Si age >= 18 Alors
Écrire("Majeur")
Sinon
Écrire("Mineur")
FinSi
Si age >= 18 Alors
Écrire("Majeur")
Sinon
Écrire("Mineur")
FinSi
if age >= 18:
print("Majeur")
else:
print("Mineur")
1.4 La structure Si sans Sinon
Quand il n'y a rien à faire dans le cas faux, on omet la branche Sinon :
Si note >= 10 Alors
Écrire("Admis")
FinSi
Si note >= 10 Alors
Écrire("Admis")
FinSi
if note >= 10:
print("Admis")
1.5 Les conditions chaînées : Si…Sinon Si…
Lorsque plusieurs cas mutuellement exclusifs existent :
Si note >= 16 Alors
Écrire("Très Bien")
Sinon Si note >= 14 Alors
Écrire("Bien")
Sinon Si note >= 12 Alors
Écrire("Assez Bien")
Sinon Si note >= 10 Alors
Écrire("Passable")
Sinon
Écrire("Insuffisant")
FinSi
Si note >= 16 Alors
Écrire("Très Bien")
Sinon Si note >= 14 Alors
Écrire("Bien")
Sinon Si note >= 12 Alors
Écrire("Assez Bien")
Sinon Si note >= 10 Alors
Écrire("Passable")
Sinon
Écrire("Insuffisant")
FinSi
if note >= 16:
print("Très Bien")
elif note >= 14:
print("Bien")
elif note >= 12:
print("Assez Bien")
elif note >= 10:
print("Passable")
else:
print("Insuffisant")
1.6 La structure Selon (choix multiple)
Quand la décision dépend de la valeur précise d'une variable (pas d'un intervalle), Selon est plus lisible qu'une cascade de Si :
Selon jour Faire
1 : Écrire("Lundi")
2 : Écrire("Mardi")
3 : Écrire("Mercredi")
4 : Écrire("Jeudi")
5 : Écrire("Vendredi")
6, 7 : Écrire("Week-end")
Sinon : Écrire("Jour invalide")
FinSelon
Selon jour Faire
1 : Écrire("Lundi")
2 : Écrire("Mardi")
3 : Écrire("Mercredi")
4 : Écrire("Jeudi")
5 : Écrire("Vendredi")
6, 7 : Écrire("Week-end")
Sinon : Écrire("Jour invalide")
FinSelon
match jour:
case 1: print("Lundi")
case 2: print("Mardi")
case 3: print("Mercredi")
case 4: print("Jeudi")
case 5: print("Vendredi")
case 6 | 7: print("Week-end")
case _: print("Jour invalide")
1.7 Trace d'exécution d'une cascade
Énoncé. Pour note = 13.5, tracer l'algorithme des mentions ci-dessus.
| N° | Instruction | note | mention |
|---|---|---|---|
| 01 | ··· | ? | ? |
| 02 | ··· | ? | ? |
| 03 | ··· | ? | ? |
| 04 | ··· | ? | ? |
| 05 | ··· | ? | ? |
2. Exercices pratiques
Niveau Débutant — Type bac courant
Écrire un programme qui lit un entier n et affiche "Pair" si n est divisible par 2, "Impair" sinon. Fournir : Tableau de Déclaration des Objets (T.D.O), algorithme, code Python 3.
Voir le corrigé
T.D.O
n | Variable / entier | Nombre saisi
Algorithme
0) Début parite
1) Lire(n)
2) Si n MOD 2 = 0 Alors
Écrire("Pair")
Sinon
Écrire("Impair")
FinSi
3) Fin parite
Python 3
n = int(input("n = "))
if n % 2 == 0:
print("Pair")
else:
print("Impair")
Remarque. L'opérateur MOD en algorithmique correspond à % en Python (reste de la division euclidienne).
Niveau Intermédiaire — Type bac difficile
Lire l'âge d'une personne et afficher sa catégorie :
- moins de 13 ans →
"Enfant", - entre 13 et 17 inclus →
"Adolescent", - entre 18 et 64 inclus →
"Adulte", - 65 ans ou plus →
"Senior".
Refuser les âges négatifs ou supérieurs à 130 en affichant "Âge invalide".
Voir le corrigé
age = int(input("Âge : "))
if age < 0 or age > 130:
print("Âge invalide")
elif age < 13:
print("Enfant")
elif age <= 17:
print("Adolescent")
elif age <= 64:
print("Adulte")
else:
print("Senior")
Astuce de relecture. Toujours tester les bornes : 12, 13, 17, 18, 64, 65 doivent tomber dans la bonne catégorie. Une erreur fréquente est de remplacer <= 17 par < 17, ce qui exclut accidentellement les jeunes de 17 ans de la catégorie Adolescent.
Niveau Avancé — Hors bac (bonus)
Écrire un algorithme qui lit trois entiers jour, mois, annee représentant une date, et affiche "Valide" ou "Invalide" selon les règles suivantes :
moisdoit être entre 1 et 12,jourdoit être entre 1 et le nombre maximum de jours du mois donné (31 pour janvier, 28 ou 29 pour février selon queanneeest bissextile, 30 ou 31 pour les autres mois),anneedoit être strictement positive.
Rappel : une année est bissextile si elle est divisible par 4 et non par 100, OU bien divisible par 400.
Voir le corrigé
jour = int(input("Jour : "))
mois = int(input("Mois : "))
annee = int(input("Année : "))
# Année bissextile ?
bissextile = (annee % 4 == 0 and annee % 100 != 0) or (annee % 400 == 0)
# Nombre de jours du mois
if mois in (1, 3, 5, 7, 8, 10, 12):
max_jour = 31
elif mois in (4, 6, 9, 11):
max_jour = 30
elif mois == 2:
max_jour = 29 if bissextile else 28
else:
max_jour = 0 # mois invalide
# Validation finale
if annee > 0 and 1 <= mois <= 12 and 1 <= jour <= max_jour:
print("Valide")
else:
print("Invalide")
Cas de test à passer mentalement :
| Entrée | Attendu |
|---|---|
29/02/2024 | Valide (2024 bissextile : 2024 % 4 = 0 et non divisible par 100) |
29/02/2023 | Invalide (2023 non bissextile) |
29/02/2000 | Valide (2000 divisible par 400) |
29/02/1900 | Invalide (divisible par 100 mais pas par 400) |
31/04/2026 | Invalide (avril a 30 jours) |
00/01/2026 | Invalide (jour = 0) |
Cet exercice combine opérateurs logiques (and, or), appartenance à un ensemble (in (...)) et calcul conditionnel (x if cond else y). C'est un excellent entraînement pour le bac.
⚠️ Erreurs fréquentes au bac
Avant le quiz, mémorisez ces pièges classiques qui font perdre des points :
- Erreur 1.
=au lieu de==dans une condition Python : c'est la cause N°1 d'erreur compilation. - Erreur 2. Ordre des conditions en cascade : tester
note ≥ 16AVANTnote ≥ 14, jamais l'inverse, sinon toutes les notes ≥ 14 deviennent « Bien ». - Erreur 3. Oublier les parenthèses :
Si a ET b > 0 Alorsest ambigu. Toujours écrireSi (a > 0) ET (b > 0) Alors. - Erreur 4. Sauter le
Sinonfinal quand on doit gérer tous les cas. Si la cascade est exhaustive, c'est OK ; sinon, danger.
3. Quiz de vérification
Conditions et opérateurs (5 questions)
Quelle valeur retourne l'expression (5 > 3) ET (2 < 1) ?
Quel est l'équivalent Python de l'opérateur de comparaison algorithmique = ?
Si note = 17, que fait elif note >= 14: print('Bien') dans une cascade qui teste d'abord note >= 16 ?
Combien de branches au minimum a une structure Si sans Sinon ?
L'expression NON (a > b) est équivalente à :
En résumé
Avant la leçon suivante (Structures itératives complètes : Pour…Faire), vérifiez que vous savez :
- ✅ Écrire une expression booléenne avec ≥3 opérateurs sans hésiter sur la priorité,
- ✅ Construire un Si…Sinon Si… cohérent (sans cas en double, sans trou),
- ✅ Détecter qu'un test de bornes est faux à la relecture,
- ✅ Choisir entre
Sichaîné etSelonselon la nature de la condition.
Sinon, refaites l'exercice 2 (catégorisation d'âge) en variant les bornes : c'est l'exercice canonique pour s'entraîner.