Prépa Python

Opérationnel — chapitre 25 sur 54

Logique booléenne approfondie

is vs ==, court-circuit, valeurs de vérité, clause else des boucles

70 minAbonnés

Les conditions if/else et les opérateurs and/or/not semblent simples. En apparence seulement. Ce chapitre explore les subtilités que le TOSA teste massivement : court-circuit, idiomes pythoniques (le or de valeur par défaut), clause else des boucles, et rappels de priorité d'opérateurs.

Différence entre is et == (rappel)

Vu au chapitre précédent, on en fait un résumé pour ce chapitre :

  • == teste si les valeurs sont égales.
  • is teste si les deux noms pointent vers le même objet en mémoire.
python
a = [1, 2, 3]
b = [1, 2, 3]
c = a

print("a == b :", a == b)    # True : même contenu
print("a is b :", a is b)    # False : objets différents

print("a is c :", a is c)    # True : alias

Règle pratique :

  • is avec None, True, False.
  • == pour comparer des valeurs.

La logique booléenne avancée

Le court-circuit

Principe : Python évalue les opérateurs logiques de gauche à droite et s'arrête dès qu'il peut conclure.

  • A and B : si A est faux → ne pas évaluer B, retourner A.
  • A or B : si A est vrai → ne pas évaluer B, retourner A.

Démonstration avec une fonction qui affiche quand elle est appelée :

python
def verifier(x):
    print(f"  → vérification de {x}")
    return x > 0

print("Test `and` avec échec à gauche :")
resultat = verifier(-5) and verifier(10)    # verifier(10) pas exécuté !
print("Résultat :", resultat)
python
def verifier(x):
    print(f"  → vérification de {x}")
    return x > 0

print("\nTest `or` avec succès à gauche :")
resultat = verifier(5) or verifier(10)      # verifier(10) pas exécuté !
print("Résultat :", resultat)

Application concrète : éviter une division par zéro.

python
def est_valide(x):
    return x != 0 and 10 / x > 2     # la 2e partie NE S'ÉVALUE PAS si x == 0

print(est_valide(0))      # False, pas de ZeroDivisionError
print(est_valide(3))      # True
print(est_valide(10))     # False (10/10 = 1 < 2)

Idiome courant : valeur par défaut avec or

Une conséquence pratique de ce comportement : on peut utiliser or pour fournir une valeur par défaut quand une variable peut être vide ou None.

python
def saluer(nom):
    nom = nom or "inconnu"       # si nom est "", None, 0... → "inconnu"
    print(f"Bonjour {nom}")

saluer("Alice")
saluer("")
saluer(None)

C'est un idiome classique en Python. Équivalent plus explicite :

python
if not nom:
    nom = "inconnu"

Les valeurs falsy et truthy (rappel)

Python évalue n'importe quelle valeur comme booléen. Voici la liste des valeurs falsy :

Type Valeur(s) falsy
Nombres 0, 0.0, 0j
Chaîne "" (vide)
Collection [], (), {}, set()
Spécial None, False

Tout le reste est truthy.

python
for valeur in [0, "", [], {}, None, False, 1, "a", [0], "False"]:
    print(f"{str(valeur):<12} → {bool(valeur)}")

Suite réservée aux abonnés

Débloquez l'intégralité du parcours

Les 54 chapitres, les exercices corrigés automatiquement, les examens blancs et le suivi de votre progression.

Voir les offresChapitres en accès libre

Déjà un accès ? Connectez-vous.