Aller au contenu

Les booléens en Python⚓︎

Booléens et opérateurs

En Python, les booléens sont représentés par les valeurs True et False.

Les opérateurs booléens de base sont and, or et not.

>>> True and False
False
>>> True or False
True
>>> not True
False
Priorités

Comme pour les opérations mathématiques, il y a des priorités sur les opérations booléennes.

>>> True or True and False
True
>>> (True or True) and False
False
>>> True or (True and False)
True

Le and est prioritaire sur le or. De même, not est prioritaire sur les autres opérations.

>>> not False and False
False
>>> not (False and False)
True
>>> (not False) and False
False
Pour tester

Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)

Les booléens comme résultat d'une opération

En programmation, les booléens sont en général obtenus à l'aide d'opérations, comme des comparaisons. Les comparaisons ne sont pas les seules opérations donnant des booléens (appartenance à une chaîne de caractères ou une liste, inclusion d'un ensemble dans un autre...)

Les opérateurs de comparaison
En maths En Python
\(a = b\) a == b
\(a \neq b\) a != b
\(a > b\) a > b
\(a \geq b\) a >= b
\(a < b\) a < b
\(a \leq b\) a <= b
Exercice 1 (sur papier)

Python permet d'écrire directement \(a < b < c\).

Écrire cette expression à l'aide de deux comparaisons et d'un opérateur logique.

Solution

Il suffit d'écrire a < b and b < c.

Exercice 2 (sur papier)
  1. Expliquer pourquoi l'expression "3 == 3 or x == y" est vraie pour toute valeur de x et de y.
  2. Expliquer pourquoi l'expression "1 == 2 and x == y" est fausse pour toute valeur de x et de y.
Solutions
  1. Puisque 3 == 3 est toujours vraie et que "A ou B" est vraie dès qu'un des deux booléens est vrai, alors "3 == 3 or x == y" est toujours vraie.
  2. Puisque 1 == 2 est toujours fausse et que "A et B" est fausse dès qu'un des deux booléens est faux, alors "1 == 2 and x == y" est toujours fausse.
Évaluation paresseuse

Lorsque Python évalue une expression booléenne, il le fait de façon paresseuse. C'est-à-dire que si la partie gauche d'un or est vraie, il n'évalue pas la partie droite. De même si la partie gauche d'un and est fausse, la partie droite n'est pas évaluée.

Cela permet d'écrire des choses comme :

>>> x = 0
>>> x == 0 or 0 < 1/x < 1
True
>>> x != 0 and 0 < 1/x < 1
False
Explications

Si la division 1/x était évaluée, il y aurait une erreur, puisqu'on ne peut pas diviser par \(0\). Mais dans les deux cas, l'évaluation n'est pas faite puisque le résultat de l'expression a déjà pu être déterminée avec la partie gauche.

Pour tester

Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)