04 - Conditions

Jusqu’ici, nos programmes exécutaient toutes les instructions dans l’ordre, de la première à la dernière. Mais un programme utile doit pouvoir prendre des décisions : un distributeur automatique vérifie que l’on a inséré assez d’argent avant de libérer un produit ; un site web affiche un message différent selon que l’on est connecté ou non. C’est le rôle des instructions conditionnelles.

L’indentation : un concept clé

En Python, l’indentation (les espaces en début de ligne) n’est pas un choix esthétique : elle est obligatoire et significative. C’est elle qui délimite les blocs d’instructions, c’est-à-dire les groupes d’instructions qui vont ensemble.

if age >= 18:
    print("Vous êtes majeur")     # ← dans le bloc if (4 espaces)
    print("Bienvenue !")           # ← dans le bloc if (4 espaces)
print("Fin du programme")         # ← hors du bloc if (pas d'indentation)

Les deux premières instructions print ne s’exécutent que si la condition est vraie. La troisième s’exécute toujours, car elle n’est pas indentée dans le bloc.

Règles à retenir :

  • on utilise quatre espaces par niveau d’indentation (convention standard en Python) ;
  • toutes les instructions d’un même bloc doivent avoir exactement la même indentation ;
  • une indentation incorrecte provoque une erreur IndentationError.
if True:
    print("ok")
      print("erreur")  # IndentationError : indentation inattendue

Dans d’autres langages (C, Java, JavaScript), les blocs sont délimités par des accolades { }. En Python, c’est l’indentation qui joue ce rôle. C’est ce qui rend le code Python particulièrement lisible, à condition de respecter cette règle.

L’instruction if

L’instruction if (« si ») exécute un bloc d’instructions uniquement lorsqu’une condition est vraie :

temperature = 35

if temperature > 30:
    print("Il fait très chaud !")
    print("Pensez à vous hydrater")
Il fait très chaud !
Pensez à vous hydrater

La condition temperature > 30 est une expression booléenne : elle vaut True ou False. Ici, 35 > 30 vaut True, donc le bloc indenté s’exécute. Les opérateurs de comparaison (==, !=, <, >, <=, >=) et les opérateurs logiques (and, or, not) utilisés dans les conditions sont détaillés dans le cours sur les opérateurs .

Attention : ne pas confondre = (affectation) et == (comparaison d’égalité).

x = 5       # affectation : x prend la valeur 5
x == 5      # comparaison : vaut True car x vaut 5

L’instruction if...else

On veut souvent exécuter un bloc si la condition est vraie et un autre bloc si elle est fausse. C’est le rôle de else (« sinon ») :

age = 15

if age >= 18:
    print("Vous êtes majeur")
else:
    print("Vous êtes mineur")
Vous êtes mineur

Exactement l’un des deux blocs s’exécute : jamais les deux, jamais aucun.

L’instruction if...elif...else

Lorsqu’il y a plus de deux cas, on utilise elif (contraction de « else if ») pour tester des conditions supplémentaires :

note = 14

if note >= 16:
    mention = "Très bien"
elif note >= 14:
    mention = "Bien"
elif note >= 12:
    mention = "Assez bien"
elif note >= 10:
    mention = "Admis"
else:
    mention = "Ajourné"

print(f"Résultat : {mention}")
Résultat : Bien

Python teste les conditions dans l’ordre, de haut en bas. Dès qu’une condition est vraie, le bloc correspondant s’exécute et tout le reste est ignoré. Si aucune condition n’est vraie, le bloc else s’exécute (s’il est présent).

Remarque importante : l’ordre des conditions compte. Ici, on teste d’abord note >= 16, puis note >= 14, etc. Si l’on inversait l’ordre en commençant par note >= 10, un élève ayant 18 entrerait dans ce premier cas et obtiendrait « Admis » au lieu de « Très bien ».

Conditions imbriquées

On peut placer un if à l’intérieur d’un autre if. Chaque niveau d’imbrication ajoute un niveau d’indentation :

age = 25
permis = True

if age >= 18:
    if permis:
        print("Vous pouvez conduire")
    else:
        print("Vous devez d'abord passer le permis")
else:
    print("Vous êtes trop jeune pour conduire")
Vous pouvez conduire

Ici, on ne teste si la personne a le permis que si elle est majeure. L’imbrication traduit une hiérarchie de décisions : la question du permis ne se pose que pour les majeurs.

On peut souvent simplifier les conditions imbriquées avec and :

if age >= 18 and permis:
    print("Vous pouvez conduire")

Mais la version imbriquée reste préférable lorsque les blocs else diffèrent selon le niveau, comme dans l’exemple ci-dessus.

Expressions ternaires

Pour les cas simples, Python permet d’écrire une condition sur une seule ligne avec une expression ternaire :

age = 20
statut = "majeur" if age >= 18 else "mineur"
print(statut)
majeur

La syntaxe est : valeur_si_vrai if condition else valeur_si_faux. C’est équivalent à :

if age >= 18:
    statut = "majeur"
else:
    statut = "mineur"

L’expression ternaire est pratique pour des affectations simples, mais il ne faut pas en abuser : dès que la logique devient complexe, un if...else classique est plus lisible.

Le mot-clé pass

Il est parfois utile d’écrire la structure d’un programme avant de remplir les blocs. Mais en Python, un bloc vide provoque une erreur. Le mot-clé pass sert de bloc vide volontaire :

age = 15

if age >= 18:
    pass  # on traitera ce cas plus tard
else:
    print("Vous êtes mineur")
Vous êtes mineur

Erreurs fréquentes

Oublier les deux-points. La ligne if, elif ou else doit toujours se terminer par :.

if age >= 18     # SyntaxError : il manque les deux-points
    print("ok")

Confondre = et ==. Écrire if x = 5 au lieu de if x == 5 provoque une erreur de syntaxe.

Mauvaise indentation. Mélanger espaces et tabulations, ou ne pas aligner les instructions d’un même bloc, produit une IndentationError.

Oublier que elif n’est pas if. Écrire plusieurs if successifs au lieu de elif fait que chaque condition est testée indépendamment, ce qui peut donner des résultats inattendus :

note = 18

# Incorrect : deux messages s'affichent
if note >= 10:
    print("Admis")
if note >= 16:
    print("Mention Très bien")
Admis
Mention Très bien
# Correct : un seul message
if note >= 16:
    print("Mention Très bien")
elif note >= 10:
    print("Admis")
Mention Très bien

Résumé

InstructionSyntaxeRôle
ifif condition:Exécute le bloc si la condition est vraie
elseelse:Exécute le bloc si la condition du if est fausse
elifelif condition:Teste une condition supplémentaire
Ternairea if cond else bCondition en une ligne
passpassBloc vide volontaire