1.2 · Conditions (if / elif / else)

Niveau 1 · Bases du langage

1.2Conditions (if / elif / else)

Objectif : écrire des branchements avec if/elif/else, comprendre l'indentation obligatoire, et combiner comparaisons et logique and/or/not.
Temps estimé : 12 min · lecture autonome · Si vous n'avez que 5 min : lisez « L'essentiel en 30s » + le schéma.

L'essentiel en 30 secondes

  • Le test décide, l'indentation délimite : bloc indenté de 4 espaces après le : — pas d'accolades, jamais de mélange espaces/tabulations.
  • elif = l'échelle : testé dans l'ordre, arrêt au premier vrai — ordonner du plus spécifique au plus général, else attrape le reste.
  • Conditions lisibles : comparaisons chaînées (18 <= age < 65), in pour l'appartenance, valeurs fausses (None, 0, "", []) testées directement.

Mini-cas filé — Nabil classe les répondants à Alger

Nabil doit classer les répondants de son enquête par tranche : enfant, adolescent, adulte, senior — avec un tarif d'atelier associé. Il écrit d'abord une cascade de if indépendants avec une indentation mélangée : IndentationError, puis un répondant de 26 ans validé dans deux tranches. Il corrige en if/elif/else ordonné du plus spécifique au plus général, 4 espaces partout, et un test lisible 18 <= age < 65 : chaque répondant tombe dans exactement une tranche.

Suite du cas 1.1 — Nabil passe du stockage des données aux décisions.

1. Le test décide, l'indentation délimite

Une condition dirige le programme : if age >= 18: puis bloc indenté de 4 espaces — l'indentation est la structure (pas d'accolades, pas de end). elif (else if) teste une autre condition si la précédente est fausse ; else couvre tous les autres cas. Python évalue dans l'ordre et s'arrête au premier bloc vrai : ordonnez du plus spécifique au plus général.

Nabil convertit son âge saisi en int puis écrit if/elif/else par tranches : le répondant de 26 ans n'est plus compté deux fois, et VS Code convertit ses tabulations en espaces.

2. Des conditions qui se lisent

Python écrit les tests comme on les lit : comparaisons chaînées (if 18 <= age < 65:), in pour l'appartenance (if user in admis:), logique and/or/not avec court-circuit. Valeurs « fausses » : None, 0, "", [], {} — if ma_liste: suffit pour tester le vide. Dix if imbriqués signalent un problème de conception (fonction, dictionnaire).

Nabil remplace ses doubles comparaisons par 18 <= age < 65 et teste sa liste de répondants avec if repondants: : le code se lit comme la règle métier.

Erreur d'interprétation fréquente : « L'indentation est décorative » ou « = et == sont interchangeables dans un test ». Non. En Python, le décalage EST la structure : un mélange espaces/tabulations lève IndentationError et un bloc mal indenté change le sens. Et = assigne (erreur de syntaxe dans un if), == compare : écrire if age = 18 ne teste rien, ça casse.
Décider proprement Tester dans l'ordre, indenter en espaces if / elif / else Tester dansl'ordre, spécifique d'abordIndentation (4 espaces) Ledécalage EST la structureTests lisibles Chaînées,in, and/or/not
Tester dans l'ordre, indenter en espaces
Version texte du schéma (SEO / lecteurs d'écran / traduction) : 1) Décider : Nabil écrit if/elif/else par tranches, du plus spécifique au plus général, avec un else qui attrape le reste. 2) Délimiter : 4 espaces après chaque :, cohérence stricte espaces contre tabulations. 3) Lisibiliser : comparaisons chaînées, in pour l'appartenance, test direct des valeurs fausses. Leçon : l'échelle ordonnée + l'indentation stricte = des décisions justes.

🔎 Exemple concret — 🔎 Exemple concret — Tarif qui se lit comme la règle

Des tranches ordonnées, comme Nabil pour ses ateliers.

age = 26
if age < 12:
    tarif = 0
elif age < 26:
    tarif = 5
elif age < 65:
    tarif = 10
else:
    tarif = 7
print(f"Age {age} : tarif {tarif}")
print(18 <= age < 65)  # True : comparaison chainee

Lecture : chaque tranche testée une fois, dans l'ordre — le else final attrape les oubliés.

Leçon : la comparaison chaînée 18 <= age < 65 se lit comme la règle métier.

Vocabulaire de la section

if / elif / else
if teste une condition ; elif teste une autre si la précédente est fausse ; else couvre tous les autres cas. Évaluation dans l'ordre, arrêt au premier vrai.

Exemple simple : Les tranches d'age classées par Nabil.

Ce que ce n'est pas : trois if indépendants qui valident deux fois le même cas.

Réflexe : une échelle ordonnée, spécifique d'abord, else à la fin.

Indentation
Décalage en début de ligne (4 espaces par convention) qui définit à quel bloc appartient une instruction. Obligatoire en Python, pas décorative.

Exemple simple : Les blocs de tranches indentés par Nabil.

Ce que ce n'est pas : un mélange espaces/tabulations dans le même fichier.

Réflexe : 4 espaces, cohérence stricte, VS Code en convertisseur.

Opérateurs de comparaison
==, !=, <, >, <=, >= : comparent deux valeurs et renvoient un booléen. Python autorise les comparaisons chaînées : 18 <= age < 65.

Exemple simple : Le 18 <= age < 65 qui qualifie les adultes de Nabil.

Ce que ce n'est pas : = dans un test (assignation, pas comparaison).

Réflexe : == compare, = assigne ; chaîner quand c'est lisible.

Opérateurs logiques
and (et), or (ou), not (non) : combinent plusieurs conditions, avec court-circuit (arrêt dès que le résultat est connu).

Exemple simple : Le age >= 18 and permis de Nabil pour l'atelier conduite.

Ce que ce n'est pas : empiler dix if imbriqués au lieu de combiner.

Réflexe : combiner avec and/or/not plutôt qu'imbriquer.

Expression booléenne
Toute expression qui vaut True ou False, évaluée par la condition. Les valeurs None, 0, "", [] sont fausses : if ma_liste: suffit.

Exemple simple : Le if repondants: qui vérifie que Nabil a des données.

Ce que ce n'est pas : comparer explicitement à True/False partout.

Réflexe : tester le vide directement, sans détour.

En pratique — En pratique — Écrire des branchements avec if/elif/else

  1. Écrivez un programme qui lit un âge (input converti en int) et affiche « Majeur » si ≥ 18, sinon « Mineur ». Soignez l'indentation des blocs.
  2. Ajoutez un cas intermédiaire avec elif : « Enfant » (< 12), « Adolescent » (< 18), « Adulte » (sinon).
  3. Combinez des conditions : « if age >= 18 and permis == True ». Testez and, or et not.
  4. Provoquez volontairement une IndentationError (décalez une ligne), lisez le message, puis corrigez : familiarisez-vous avec cette erreur.
Vous écrivez des décisions claires avec if/elif/else et vous maîtrisez l'indentation — le point qui déroute le plus les débutants.

Script prêt à dire — expliquer l'ordre des elif (30 s)

« J'ai ordonné les tranches du plus spécifique au plus général : Python s'arrête au premier test vrai, donc l'ordre garantit qu'un cas ne tombe jamais dans deux tranches. Et le else final attrape tout ce qu'on n'a pas prévu. »

À dire en revue de code ; montrer la règle métier face au code.

Modèle copier-coller — tranches ordonnées + test lisible

age = int(input("Age ? "))
if age < 12:
    categorie = "Enfant"
elif age < 18:
    categorie = "Adolescent"
elif age < 65:
    categorie = "Adulte"
else:
    categorie = "Senior"
print(f"Categorie : {categorie}")
if 18 <= age < 65:
    print("Cible atelier principal")

Tranches à Alger

Comme Nabil : une échelle if/elif/else par tranche — ajouter une tranche, c'est insérer un elif au bon rang, sans toucher aux autres.

Test métier lisible

18 <= age < 65 se relit comme la règle : la comparaison chaînée évite le and redondant.

Appartenance

if code in valides pour les codes d'enquête : l'appartenance remplace une ribambelle de == or ==.

Liste vide ou pas

if repondants: suffit — pas besoin de comparer la longueur à zéro, le falsy fait le travail.

✓ Bonnes pratiques

  • Indenter à 4 espaces, jamais de tabulations mélangées.
  • Ordonner les elif du plus spécifique au plus général.
  • Tester le falsy directement (if liste:) et chaîner les comparaisons.

✗ Pièges fréquents

  • Mélanger tabulations et espaces (IndentationError).
  • Écrire = au lieu de == dans le test.
  • Empiler dix if imbriqués au lieu de repenser la structure.

Points clés à retenir

  • if / elif / else dirigent le programme selon des conditions, évaluées dans l'ordre jusqu'au premier vrai.
  • L'indentation (4 espaces) délimite les blocs : elle est obligatoire, pas décorative.
  • Comparaisons : == != < > <= >= (chaînables) ; logique : and, or, not.
  • Une condition évalue une expression booléenne (True/False) ; None, 0, "" et [] sont faux.

Défi 48h — appliquez demain

Prenez le modèle ci-dessus : ajoutez une 4e tranche (un elif au bon rang), remplacez un double test par une comparaison chaînée, et provoquez puis corrigez une IndentationError. Vérifiez chaque tranche en local. 20 minutes suffisent.

Checklist sortie de section
  • Je classe en if/elif/else ordonné avec un else qui attrape le reste.
  • Mon indentation est stricte (4 espaces, zéro mélange).
  • J'écris des tests lisibles (chaînées, in, and/or/not).
Auto-évaluation 1-5 : mes tranches sont-elles ordonnées sans chevauchement ?est-ce que mes conditions se lisent comme la règle métier ?

Questions fréquentes

Combien d'espaces pour l'indentation ?

La convention (PEP 8) est de 4 espaces par niveau. L'essentiel est la cohérence : ne mélangez jamais espaces et tabulations dans un même fichier. VS Code convertit les tabulations en espaces automatiquement — activez l'affichage des blancs pour vérifier.

Peut-on enchaîner plusieurs elif ?

Oui, autant que nécessaire. Python évalue les conditions de haut en bas et exécute le premier bloc dont la condition est vraie, puis sort de la structure. Le else final (optionnel) attrape tous les cas restants — prévoyez-le pour les oublis.

Vérifiez votre compréhension

Que se passe-t-il si on mélange espaces et tabulations ?

Ressources supplémentaires (optionnel, pour aller plus loin)

Examen du niveau 1Questions inédites et durcies pour valider vos acquis