Les conditions en Python
Controler le flux d'execution avec des conditions
Les valeurs booleennes
En Python, le type bool ne possede 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 booleennes — Python lancerait une NameError. Ecrivez toujours True et False avec une majuscule.
Les operateurs de comparaison
Les operateurs de comparaison permettent de comparer deux valeurs et retournent un booleen.
| Operateur | Signification | Exemple | Resultat |
|---|---|---|---|
== | Egal a | 5 == 5 | True |
!= | Differents de | 5 != 3 | True |
< | Inferieur a | 3 < 5 | True |
> | Superieur a | 3 > 5 | False |
<= | Inferieur ou egal a | 5 <= 5 | True |
>= | Superieur ou egal a | 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 operateurs logiques
Les operateurs logiques permettent de combiner plusieurs conditions.
| Operateur | 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 resultat 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 verite
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 defini par l'indentation (4 espaces par convention). C'est une caracteristique fondamentale du langage.
age = 20
if age >= 18:
print("Vous etes majeur")
print("Acces autorise")
L'indentation est obligatoire en Python. Un code mal indente provoque une IndentationError. Utilisez toujours 4 espaces (pas des tabulations) pour indenter votre code.
Configurez votre editeur pour utiliser 4 espaces et non des tabulations. La plupart des editeurs (VS Code, PyCharm) le font automatiquement pour Python. Une indentation coherente evite les bugs difficiles a reperer.
Le bloc if/else
Le bloc else s'execute 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.")
Evitez les conditions negatives dans le if — elles sont moins lisibles. Preferez if nombre > 0: a if not (nombre <= 0):. La clarte prime sur la concision.
La chaine 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 evalue les conditions de haut en bas et s'arrete des qu'une condition est vraie. Seul le bloc correspondant est execute.
Dans une chaine if/elif, ordonnez les conditions du cas le plus restrictif au plus general. Avec des intervalles de notes, commencez par la note la plus haute. Sinon, les conditions superieures pourraient etre "mangees" par une condition plus large.
Les conditions imbriquees
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 a 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 imbrique.
Les operateurs d'appartenance : in et not in
in teste si une valeur est presente dans une sequence (liste, chaine, 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'ecrire 0 <= x <= 100 directement (comparaison chainee), ce qui est encore plus lisible que x >= 0 and x <= 100. Cette syntaxe est unique a Python et tres elegante !
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. Evitez de l'imbriquer (a if c1 else b if c2 else c) car cela devient vite illisible. Privilegiez un if/elif/else classique dans ce cas.
Les valeurs truthy et falsy
En Python, toute valeur peut etre evaluee comme un booleen dans une condition. Certaines valeurs sont considerees comme "fausses" (falsy).
Valeurs falsy (evaluees comme False) :
False0(zero entier ou flottant)""ou''(chaine vide)None[](liste vide),{}(dict vide),()(tuple vide)
Valeurs truthy (evaluees comme True) :
- Tout le reste : nombres non nuls, chaines 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 role du default et correspond a tout ce qui n'a pas ete capture par les cas precedents.
# 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})")
Test de memorisation/comprehension
Une solution
Vous devez être connecté pour voir le contenu.