Skip to content

Opérateurs booléens en Python (and, or, not)

Python fournit des opérateurs booléens, and, or, not. Par exemple, ils sont utilisés pour gérer plusieurs conditions dans l’instruction if.

Cet article décrit le contenu suivant.

  • et (conjonction logique)
  • ou (disjonction logique)
  • non (négation)
  • Priorité des opérateurs and, or, not
  • Opérations booléennes pour les objets qui ne sont pas de type booléen
  • et, ou ne renvoie PAS toujours le type booléen
  • Évaluation des courts-circuits

Consultez l’article suivant pour les opérations au niveau du bit sur chaque bit d’un entier au lieu des opérations booléennes de True et False. Utilisez & et | au lieu de et et ou.

Voir l’article suivant pour l’instruction if.

et (conjonction logique)

et renvoie la conjonction logique de deux valeurs.

print(True and True)
# True

print(True and False)
# False

print(False and True)
# False

print(False and False)
# False

En pratique, il est souvent utilisé pour les expressions conditionnelles avec des opérateurs de comparaison (<, >, etc.) plutôt que pour Vrai, Faux. Il en va de même pour ou et non décrit plus loin.

a = 10
print(0 < a)
# True

print(a < 100)
# True

print(0 < a and a < 100)
# True

Les comparaisons multiples peuvent être enchaînées comme suit.

print(0 < a < 100)
# True

ou (disjonction logique)

ou renvoie la disjonction logique de deux valeurs.

print(True or True)
# True

print(True or False)
# True

print(False or True)
# True

print(False or False)
# False

non (négation)

not renvoie la négation de la valeur. Vrai et faux sont inversés.

print(not True)
# False

print(not False)
# True

Priorité des opérateurs and, or, not

La priorité des opérateurs booléens n’est pas > et > ou (pas est la priorité la plus élevée).

Dans l’exemple de code ci-dessous, la première expression est considérée comme la seconde.

Peu importe s’il y a des parenthèses supplémentaires (), donc dans des cas comme cet exemple, les parenthèses peuvent faciliter la compréhension de la signification de l’expression.

print(True or True and False)
# True

print(True or (True and False))
# True

Si vous voulez calculer ou avant et, utilisez des parenthèses () pour ou.

print((True or True) and False)
# False

Les opérateurs de comparaison tels que <, > ont une priorité plus élevée que non, et, ou, donc les parenthèses () ne sont pas nécessaires pour chaque comparaison, comme dans l’exemple ci-dessus.

print(0 < a and a < 100)
# True

Voir la documentation officielle ci-dessous pour un résumé de la priorité des opérateurs en Python.

Opérations booléennes pour les objets qui ne sont pas de type booléen

Les opérateurs booléens and, or, not gèrent non seulement le type booléen (True, False) mais aussi les nombres, les chaînes, les listes, etc.

En Python, les objets suivants sont considérés comme faux dans les opérations booléennes.

  • constantes définies comme fausses :None and False
  • zéro de n’importe quel type numérique :0, 0.0, 0j, Decimal(0), Fraction(0, 1)
  • séquences et collections vides :'', (), [], {}, set(), range(0)

Tout le reste est considéré comme vrai.

Vous pouvez obtenir la valeur booléenne d’un objet avec la fonction bool(). Notez que les chaînes ‘0’ et ‘False’ sont considérées comme vraies.

print(bool(10))
# True

print(bool(0))
# False

print(bool(''))
# False

print(bool('0'))
# True

print(bool('False'))
# True

print(bool([]))
# False

print(bool([False]))
# True

Utilisez distutils.util.strtobool() pour traiter les chaînes ‘0’ et ‘False’ comme fausses. Voir l’article suivant.

et, ou ne renvoie PAS toujours le type booléen

et, ou, et non pour les entiers :

x = 10  # True
y = 0  # False

print(x and y)
# 0

print(x or y)
# 10

print(not x)
# False

Comme vous pouvez le voir dans l’exemple ci-dessus, en Python, and and or ne renvoie pas bool (True,False), mais renvoie les valeurs gauche ou droite. ne renvoie pas booléen (True, False).

Il en va de même pour les autres types tels que les chaînes, les listes, etc.

Les définitions des valeurs de retour de et et ou sont les suivantes.

L’expression x et y évalue d’abord x ; si x est faux, sa valeur est retournée ; sinon, y est évalué et la valeur résultante est renvoyée.

L’expression x ou y évalue d’abord x ; si x est vrai, sa valeur est renvoyée ; sinon, y est évalué et la valeur résultante est renvoyée.
6. Expressions — documentation Python 3.9.1

Si les valeurs à gauche et à droite sont true et false, la valeur de retour est facile à comprendre, mais si les deux sont true ou les deux sont false, la valeur de retour diffère selon l’ordre.

Lorsque vous l’utilisez comme expression conditionnelle dans une instruction if, le résultat est testé comme une valeur booléenne, il n’y a donc pas lieu de s’en soucier, mais soyez prudent lorsque vous utilisez la valeur de retour dans les opérations suivantes.

x = 10  # True
y = 100  # True

print(x and y)
# 100

print(y and x)
# 10

print(x or y)
# 10

print(y or x)
# 100
x = 0  # False
y = 0.0  # False

print(x and y)
# 0

print(y and x)
# 0.0

print(x or y)
# 0.0

print(y or x)
# 0

print(bool(x and y))
# False

Si vous souhaitez recevoir le résultat sous la forme True ou False, utilisez bool() comme dans le dernier exemple.

Les valeurs de retour de et et ou sont résumées dans le tableau ci-dessous.

X Oui x et y x ou y
vrai faux Oui X
faux vrai X Oui
vrai vrai Oui X
faux faux X Oui

Évaluation des courts-circuits

Comme vous pouvez le voir dans le tableau ci-dessus, si x est faux dans x et y ou si x est vrai dans x ou y, la valeur de retour est toujours x. Dans de tels cas, y n’est pas évalué.

Notez que si vous appelez une fonction ou une méthode sur le côté droit de et et ou, elles peuvent ne pas être exécutées en fonction du résultat sur le côté gauche.

def test():
    print('function is called')
    return True

print(True and test())
# function is called
# True

print(False and test())
# False

print(True or test())
# True

print(False or test())
# function is called
# True