La structure conditionnelle Python if and condition est l’un des premiers mécanismes de contrôle du flux qu’un apprenant rencontre en programmation. Elle permet d’exécuter un bloc de code uniquement lorsqu’une ou plusieurs conditions sont vérifiées. Avant d’enchaîner les exemples, il vaut mieux comprendre ce que Python évalue réellement quand il rencontre un if – parce que ce n’est pas toujours ce qu’on croit.
Ce que Python évalue réellement dans une condition if
Quand Python exécute if x:, il ne cherche pas un booléen True ou False explicite. Il teste la valeur de vérité de l’objet passé. Une chaîne vide, le nombre 0, une liste vide ou None sont tous considérés comme faux. Une chaîne non vide ou n’importe quel entier non nul sont considérés comme vrais.
Cette distinction change la façon dont on écrit ses conditions. Pour tester l’absence d’une valeur, x is None est plus précis que if not x:, qui traiterait 0 et "" comme des cas d’absence alors qu’ils peuvent être des valeurs valides dans le programme.
La syntaxe de base reste simple :
if condition:
# bloc exécuté si la condition est vraie
L’indentation définit le bloc. Python ne tolère pas son absence : une ligne non indentée après le if sort du bloc conditionnel.
L’opérateur and dans une condition Python : court-circuit et ordre
L’opérateur and combine deux conditions. Le bloc ne s’exécute que si les deux sont vraies. Mais son comportement va plus loin que la simple logique booléenne.
and s’arrête dès que le résultat est déterminé : si la première condition est fausse, la seconde n’est pas évaluée. C’est ce qu’on appelle le court-circuit. Concrètement, cela permet d’écrire :
if liste and liste[0] == "admin":
print("Accès autorisé")
Si liste est vide (donc fausse), Python ne tente pas d’accéder à liste[0], ce qui évite une erreur d’index. L’ordre des conditions dans un if ... and ... n’est donc pas anodin : placer en premier le test le moins coûteux ou le plus susceptible d’échouer rend le code plus robuste.
and peut aussi renvoyer une valeur, pas forcément un booléen. L’expression x and y renvoie x si celui-ci est faux, sinon elle renvoie y. Ce comportement s’utilise dans des assignations conditionnelles concises, même si la forme if/else explicite reste plus lisible pour un débutant.

Combiner if, elif et else pour structurer les cas
Une condition if seule ne couvre qu’un cas. Pour gérer plusieurs branches, elif et else complètent la structure. Une seule branche est exécutée : la première dont la condition est vraie.
L’ordre des tests dans une chaîne if/elif change le résultat. Quand les cas se recouvrent, le test le plus spécifique doit apparaître en premier. Voici un exemple avec une note :
note = 75
if note >= 90:
print("Très bien")
elif note >= 70:
print("Bien")
elif note >= 50:
print("Passable")
else:
print("Insuffisant")
Si on plaçait note >= 50 avant note >= 70, une note de 75 tomberait dans « Passable » au lieu de « Bien ». Le test plus large capturerait prématurément tous les cas au-dessus de 50.
else ne porte pas de condition : il capte tout ce que les branches précédentes n’ont pas couvert. Son usage est recommandé quand un cas par défaut a du sens, mais il n’est pas obligatoire.
Les erreurs courantes avec and et les conditions imbriquées
Plusieurs pièges reviennent souvent chez les débutants en Python.
- Comparer plusieurs valeurs sans répéter la variable.
if x == 1 or 2:ne teste pas si x vaut 1 ou 2. Python évalue2seul comme une valeur de vérité (toujours vraie), ce qui rend la condition toujours vraie. La forme correcte estif x == 1 or x == 2:, ou plus lisiblementif x in (1, 2):. - Imbriquer des if là où elif suffit. Un
ifimbriqué dans unelsecrée une indentation supplémentaire et rend le code plus difficile à lire. Unelifremplace cette structure en gardant le même niveau d’indentation. - Oublier les cas limites. Une condition qui fonctionne avec un exemple « normal » peut échouer aux extrêmes : valeur nulle, chaîne vide, liste d’un seul élément. Tester les cas limites fait partie de la vérification d’une condition, pas seulement l’exemple courant.
- Confondre
=et==.=assigne une valeur,==compare. Écrireif x = 5:provoque une erreur de syntaxe en Python, ce qui aide à détecter la confusion rapidement.
Quand match/case remplace avantageusement une longue chaîne de conditions
Depuis Python 3.10, l’instruction match/case offre une alternative aux longues chaînes if/elif lorsque les branches sélectionnent un comportement selon la forme ou la valeur d’une structure. Elle n’est pas un simple équivalent du switch d’autres langages : elle permet de faire correspondre des motifs complexes, comme un dictionnaire contenant une clé donnée, et pas seulement une comparaison de valeurs.
Pour un débutant, cette instruction reste secondaire. Une bonne maîtrise de if/elif/else et de l’opérateur and couvre la grande majorité des cas de contrôle de flux rencontrés dans les premiers projets Python. La limite ici est que match/case n’est pas disponible dans les versions antérieures à 3.10, ce qui peut contraindre son usage dans des environnements dont la version Python n’est pas maîtrisée.
Exemple complet : Python if and condition dans un cas réel
Voici une vérification d’accès qui combine plusieurs concepts :
age = 20
carte_valide = True
if age >= 18 and carte_valide:
print("Accès autorisé")
elif age >= 18 and not carte_valide:
print("Carte invalide, accès refusé")
else:
print("Accès refusé : âge insuffisant")
La première branche exige que les deux conditions soient vraies. La deuxième couvre le cas où l’âge suffit mais la carte pose problème. La troisième capte tous les cas restants. Chaque branche correspond à un cas distinct, sans recouvrement.
Ce découpage montre la valeur d’une structure if/elif/else bien pensée : chaque situation est traitée une seule fois, dans la branche qui lui correspond, sans effet de bord.
La maîtrise de la condition Python if and repose moins sur la mémorisation de la syntaxe que sur la compréhension de ce que Python évalue, dans quel ordre, et pourquoi l’ordre des branches compte. Une condition mal ordonnée ou un opérateur and mal placé produit un code qui s’exécute sans erreur mais qui ne fait pas ce qu’on attend.

