Les conditions en Python
Contrôler le flux d'exécution avec des conditions
Les valeurs booléennes
En Python, le type bool ne possède que deux valeurs : True et False (avec une majuscule obligatoire !).
est_majeur = True
est_connecte = False
print(type(True)) # <class 'bool'>
En Python, true et false (minuscules) ne sont pas des valeurs booléennes — Python lancerait une NameError. Écrivez toujours True et False avec une majuscule.
Les opérateurs de comparaison
Les opérateurs de comparaison permettent de comparer deux valeurs et retournent un booléen.
| Opérateur | Signification | Exemple | Résultat |
|---|---|---|---|
== | Égal à | 5 == 5 | True |
!= | Différents de | 5 != 3 | True |
< | Inférieur à | 3 < 5 | True |
> | Supérieur à | 3 > 5 | False |
<= | Inférieur ou égal à | 5 <= 5 | True |
>= | Supérieur ou égal à | 6 >= 5 | True |
age = 20
print(age == 18) # False
print(age >= 18) # True
print(age != 21) # True
Ne confondez pas = (affectation) et == (comparaison) ! age = 18 assigne la valeur, age == 18 compare.
Les opérateurs logiques
Les opérateurs logiques permettent de combiner plusieurs conditions.
| Opérateur | Signification | Exemple |
|---|---|---|
and | Les deux conditions sont vraies | age >= 18 and age < 65 |
or | Au moins une condition est vraie | note == 0 or note == 20 |
not | Inverse le résultat de la condition | not est_connecte |
age = 25
permis = True
# and : les deux doivent etre vrais
peut_conduire = age >= 18 and permis
print(peut_conduire) # True
# or : au moins un doit etre vrai
est_weekend = jour == 'samedi' or jour == 'dimanche'
# not : inverse le booleen
print(not False) # True
Table de vérité
print(True and True) # True
print(True and False) # False
print(False or True) # True
print(False or False) # False
print(not True) # False
Le bloc if : l'indentation est obligatoire !
En Python, il n'y a pas d'accolades {}. Le corps d'un bloc est défini par l'indentation (4 espaces par convention). C'est une caractéristique fondamentale du langage.
age = 20
if age >= 18:
print("Vous etes majeur")
print("Acces autorise")
L'indentation est obligatoire en Python. Un code mal indenté provoque une IndentationError. Utilisez toujours 4 espaces (pas des tabulations) pour indenter votre code.
Configurez votre éditeur pour utiliser 4 espaces et non des tabulations. La plupart des éditeurs (VS Code, PyCharm) le font automatiquement pour Python. Une indentation cohérente évite les bugs difficiles à repérer.
Le bloc if/else
Le bloc else s'exécute quand la condition du if est fausse.
temperature = 15
if temperature >= 20:
print("Il fait chaud, mettez un t-shirt !")
else:
print("Il fait frais, prenez une veste.")
Évitez les conditions négatives dans le if — elles sont moins lisibles. Préférez if nombre > 0: à if not (nombre <= 0):. La clarté prime sur la concision.
La chaîne if/elif/else
Quand on a plusieurs cas mutuellement exclusifs, on utilise elif (contraction de "else if").
note = 75
if note >= 90:
mention = "Tres bien"
elif note >= 80:
mention = "Bien"
elif note >= 70:
mention = "Assez bien"
elif note >= 60:
mention = "Passable"
else:
mention = "Insuffisant"
print(f"Mention : {mention}")
Python évalue les conditions de haut en bas et s'arrête dès qu'une condition est vraie. Seul le bloc correspondant est exécuté.
Dans une chaîne if/elif, ordonnez les conditions du cas le plus restrictif au plus général. Avec des intervalles de notes, commencez par la note la plus haute. Sinon, les conditions supérieures pourraient être "mangées" par une condition plus large.
Les conditions imbriquées
On peut imbriquer des blocs if les uns dans les autres. Chaque niveau d'imbrication ajoute 4 espaces d'indentation.
age = 25
a_un_compte = True
if age >= 18:
if a_un_compte:
print("Bienvenue sur votre espace client !")
else:
print("Veuillez creer un compte.")
else:
print("Acces reserve aux majeurs.")
Trop d'imbrications rendent le code difficile à lire. Utilisez and pour combiner des conditions quand c'est possible : if age >= 18 and a_un_compte: est plus lisible qu'un double if imbriqué.
Les opérateurs d'appartenance : in et not in
in teste si une valeur est présente dans une séquence (liste, chaîne, tuple...).
fruits = ["pomme", "banane", "cerise"]
if "banane" in fruits:
print("La banane est dans la liste")
if "mangue" not in fruits:
print("Pas de mangue dans la liste")
# Fonctionne aussi sur les chaines
mot = "bonjour"
if "bon" in mot:
print("Le mot contient 'bon'")
Python permet d'écrire 0 <= x <= 100 directement (comparaison chaînée), ce qui est encore plus lisible que x >= 0 and x <= 100. Cette syntaxe est unique à Python et très élégante !
L'expression ternaire
Python propose une expression conditionnelle sur une seule ligne, utile pour les affectations simples.
Syntaxe : valeur_si_vrai if condition else valeur_si_faux
age = 20
statut = "majeur" if age >= 18 else "mineur"
print(statut) # majeur
# Equivalent au if/else classique :
if age >= 18:
statut = "majeur"
else:
statut = "mineur"
# Autres exemples utiles
note = 15
resultat = "Reussi" if note >= 10 else "Echoue"
x = -5
valeur_absolue = x if x >= 0 else -x
L'expression ternaire est parfaite pour les affectations simples. Évitez de l'imbriquer (a if c1 else b if c2 else c) car cela devient vite illisible. Privilégiez un if/elif/else classique dans ce cas.
Les valeurs truthy et falsy
En Python, toute valeur peut être évaluée comme un booléen dans une condition. Certaines valeurs sont considérées comme "fausses" (falsy).
Valeurs falsy (évaluées comme False) :
False0(zéro entier ou flottant)""ou''(chaîne vide)None[](liste vide),{}(dict vide),()(tuple vide)
Valeurs truthy (évaluées comme True) :
- Tout le reste : nombres non nuls, chaînes non vides, listes non vides...
# Exemples de valeurs falsy
if 0:
print("jamais affiche")
if "":
print("jamais affiche")
if None:
print("jamais affiche")
if []:
print("jamais affiche")
# Valeurs truthy
if 42:
print("42 est truthy") # Affiche
if "bonjour":
print("Une chaine non vide est truthy") # Affiche
if [1, 2, 3]:
print("Une liste non vide est truthy") # Affiche
# Utilisation pratique : verifier si une liste est non vide
ma_liste = [1, 2, 3]
if ma_liste:
print(f"La liste contient {len(ma_liste)} element(s)")
Le match/case (Python 3.10+)
Python 3.10 a introduit l'instruction match/case, similaire au switch/case d'autres langages, mais bien plus puissante.
commande = "quitter"
match commande:
case "demarrer":
print("Demarrage en cours...")
case "arreter":
print("Arret en cours...")
case "quitter":
print("Au revoir !")
case _:
print(f"Commande inconnue : {commande}")
Le case _: joue le rôle du default et correspond à tout ce qui n'a pas été capturé par les cas précédents.
# match/case peut aussi capturer des valeurs
point = (1, 0)
match point:
case (0, 0):
print("Origine")
case (x, 0):
print(f"Sur l axe X, x = {x}")
case (0, y):
print(f"Sur l axe Y, y = {y}")
case (x, y):
print(f"Point quelconque ({x}, {y})")