Opérateurs booléens
Combinez des conditions avec and, or, not, les connecteurs logiques de Python.
- Utiliser and, or et not pour combiner des expressions booléennes
- Comprendre l'évaluation en court-circuit
- Appliquer les lois de De Morgan en Python
- Écrire des conditions complexes clairement
Construire des conditions à partir de conditions
Les opérateurs de comparaison vous donnent une seule valeur de vérité : True ou False. La porte de la boîte pose deux questions à la fois, « êtes-vous majeur, et tenez-vous un billet ? », et cette conjonction est elle-même une condition. Python, comme la logique rencontrée en mathématiques, offre les trois connecteurs qui combinent des propositions :
- s’écrit
and - s’écrit
or - s’écrit
not
Les trois connecteurs
Leur comportement est la table de vérité que vous connaissez déjà. Écrivez-la en Python et elle se lit à l’identique :
True and True # True
True and False # False
False or True # True
not True # FalseLeur intérêt est de coller des comparaisons dans une seule porte. Un lieu, une alerte météo, un jour de travail :
age = 20
has_ticket = True
if age >= 18 and has_ticket:
print("Welcome in")
temperature = 30
if temperature < 0 or temperature > 40:
print("Extreme weather!")
is_weekend = False
if not is_weekend:
print("Time to work")Chacune est une question unique assemblée de plus petites, exactement comme assemblait des intervalles dans la leçon précédente.
L’évaluation en court-circuit
La table de vérité complète liste quatre lignes, mais Python n’en a pas toujours besoin. Évaluez and avec : la réponse est False quel que soit , donc n’est jamais calculé. Le même mur vaut pour or : dès que est True, le résultat est tranché. Python lit de gauche à droite et s’arrête à la première réponse décisive.
Ce n’est pas un confort de performance ; c’est un dispositif de sécurité :
x = 0
# Aucune division n'a lieu — 0 est faux, la seconde moitié est sautée
result = x != 0 and 10 / x > 2Si Python évaluait les deux côtés, planterait sur une division par zéro. Le mot and est une porte de pré-vol : il refuse de faire voler la seconde condition tant que la première ne l’autorise pas. C’est pourquoi Python écrit and/or là où les langages de la famille C écrivent &&/||, les mots portent le même court-circuit sans les symboles cryptiques.
Les deux échanges de De Morgan
Les identités les plus réutilisables de la logique font traverser une négation à travers un connecteur :
- ,
not (A and B)≡not A or not B - ,
not (A or B)≡not A and not B
En Python, la négation d’une condition jointe devient une condition jointe de négations :
# Elles sont équivalentes :
not (age >= 18 and has_ticket)
age < 18 or not has_ticketLa forme réécrite se lit d’un trait : la porte n’ouvre à aucun mineur et à aucun sans billet. Les lois de De Morgan sont l’outil pour transformer un dense not (…) à démêler en une lecture franche.
Les tables de vérité, d’un coup d’œil
| True | True | True | True |
| True | False | False | True |
| False | True | False | True |
| False | False | False | False |
Et retourne l’unique valeur de vérité : not True → False, not False → True.
Un exemple travaillé : la porte du club, racontée deux fois
Une porte, un verdict, deux formulations. La règle d’admission refuse quiconque n’est pas majeur ou n’a pas de billet :
age = 20
has_ticket = True
denied = not (age >= 18 and has_ticket) # False
denied_again = age < 18 or not has_ticket # False — De Morgan, équivalentLa première ligne dit « il n’est pas vrai que (majeur ET avec billet) » ; la seconde dit « mineur OU sans billet », les deux faces de la loi de De Morgan, et toutes deux répondent pareil. La version dénouée se lit comme la phrase qu’elle décrit.
Pièges courants
and/orrenvoient un opérande, pas un booléen.0 and 5vaut0;0 or 5vaut5. Python rend la valeur qui a décidé. Le 0 faux a décidé, donc c’est 0 qui revient.notse lie plus fort que==.not a == bse litnot (a == b), pas(not a) == b. Parenthèsez dans le doute.- Des mots, pas des symboles bit à bit.
True and FalsevautFalse;True & Falseest une opération bit à bit sur des booléens, de comportement différent. Réservez&/|au travail au niveau des bits. and/orsont paresseux d’une façon qui cache des bogues. Si le côté décisif est déjà truthy/falsy, l’autre côté ne s’exécute jamais,1 or missing_function()n’appelle jamais la fonction. Une moitié morte qui n’a pas planté peut cacher un nom oublié.
🧩 Défis
🧩 Défi, réfléchissez d'abord, puis révélez
Sans l’exécuter, prédisez : 0 and 5, 0 or 5, 3 and 5, 3 or 5. Quel motif voyez-vous ?
💡 Réponse : 0 and 5 → 0, 0 or 5 → 5, 3 and 5 → 5, 3 or 5 → 3. Motif : and rend le premier opérande faux (ou le dernier si tous sont vrais) ; or rend le premier vrai (ou le dernier si tous sont faux).
🧩 Défi, réfléchissez d'abord, puis révélez
Réécrivez not (x > 5 and y < 10) avec la loi de De Morgan. La version réécrite est-elle plus lisible ?
💡 Réponse : not (x > 5 and y < 10) ≡ x <= 5 or y >= 10, une lecture directe, sans négation composée à démêler.
🧩 Défi, réfléchissez d'abord, puis révélez
Écrivez la condition d’année bissextile : divisible par 4, sauf les siècles (divisibles par 100) à moins d’être aussi divisibles par 400. Utilisez and, or, not.
💡 Réponse : (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0), divisible par 4 mais pas par 100, ou divisible par 400.
🤔 Questions socratiques
0 and 5donne0, pasFalse. Pourquoi Python rend-il la valeur qui décide plutôt qu’un booléen ? Quand cela devient-il utile ?- Si
orrend le premier opérande vrai, que vaut"hello" or "world"? Et"" or "world"? - Pourquoi Python préfère-t-il les mots
and,or,notaux symboles&&,||,!? Qu’achète l’anglais en clair au lecteur ?
✅ Vérification rapide
1. Que vaut True and False ?
2. Que vaut 0 or 5 ?
3. Lequel équivaut à not (a and b) ?