Opérateurs logiques Python et, ou, et non (conjonction logique, disjonction, négation)

Affaires

Python fournit des opérateurs logiques pour effectuer des opérations logiques (booléennes).(and,or,not)
Il est utilisé pour décrire la relation entre plusieurs conditions dans une instruction if.

Cette section décrit les éléments suivants.

  • intersection: and
  • ajout logique: or
  • déni: not
  • and,or,notPréséance des opérateurs

En outre, les points suivants sont expliqués à titre d'avertissement.

  • Opérateurs logiques pour les objets de type autre que bool
  • and,orCes valeurs de retour ne sont pas nécessairement de type bool.
  • Court-circuit (évaluation du court-circuit)

intersection: and

et renvoie le produit 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 fait, il est souvent utilisé non pas pour le vrai ou le faux, mais pour des expressions conditionnelles utilisant des opérateurs de comparaison. Pour votre information, les opérateurs de comparaison sont les suivants.

  • <
  • >
a = 10
print(0 < a)
# True

print(a < 100)
# True

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

et peuvent être concaténés comme suit.

print(0 < a < 100)
# True

ajout logique: or

ou renvoie le OU logique des deux valeurs.

print(True or True)
# True

print(True or False)
# True

print(False or True)
# True

print(False or False)
# False

déni: not

not” renvoie la négation de la valeur ; vrai et faux sont inversés.

print(not True)
# False

print(not False)
# True

and,or,notPréséance des opérateurs

L'ordre de préséance de ces opérateurs logiques est le suivant : not est le plus élevé.

  1. not
  2. and
  3. or

Dans l'exemple de code suivant, l'expression ci-dessus est interprétée comme s'il s'agissait de celle ci-dessous. Puisque les parenthèses supplémentaires ne posent aucun problème, il peut être plus facile de les décrire clairement dans des cas comme cet exemple.

print(True or True and False)
# True

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

Si vous voulez faire fonctionner ou avant et, utilisez les parenthèses().

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

<,>Ces opérateurs de comparaison ont une priorité encore plus élevée que les autres. Par conséquent, les parenthèses ne sont pas nécessaires pour chaque opération de comparaison, comme c'était le cas dans l'exemple ci-dessus.

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

Consultez la documentation officielle ci-dessous pour un résumé de la précédence des opérateurs en Python.

Opérateurs logiques pour les objets de type autre que bool

Avec ces opérateurs logiques, non seulement les types bool (true, false), mais aussi les nombres, les chaînes de caractères, les listes, etc. sont traités comme des valeurs booléennes.

Les objets suivants sont considérés comme faux dans les opérations logiques de Python.

  • Constantes définies comme étant fausses: None,false
  • Zéro dans les types numériques: 0,0,0j,Decimal(0),Fraction(0, 1)
  • Séquence ou collection vide: '',(),[],{},set(),range(0)

Toutes les autres valeurs sont considérées comme vraies.

La fonction bool() peut être utilisée pour obtenir la valeur booléenne d'un objet. Notez que la chaîne '0' ou 'False' est considérée comme vraie.

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

Pour traiter '0' ou 'false' dans une chaîne comme faux, utilisez distutils.util.strtobool().

and,orCes valeurs de retour ne sont pas nécessairement de type bool.

Voici un exemple d'un objet autre qu'un type bool, montrant le résultat de chaque opérateur sur une valeur numérique.

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, and et or en Python ne renvoient pas true ou false du type bool, mais renvoient la valeur à gauche ou à droite selon qu'elle est vraie ou fausse. L'exemple est numérique, mais la même chose s'applique à d'autres types tels que les chaînes de caractères et les listes. Par ailleurs, not renvoie true ou false pour le type bool.

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

The expression x and y first evaluates x; if x is false, its value is returned; otherwise, y is evaluated and the resulting value is returned.

The expression x or y first evaluates x; if x is true, its value is returned; otherwise, y is evaluated and the resulting value is returned.

6.11. Boolean operations — Expressions — Python 3.10.1 Documentation

Lorsque les valeurs des expressions de gauche et de droite sont vraies et fausses séparément, les valeurs de retour sont faciles à comprendre. En revanche, si les deux sont vrais ou faux, la valeur de retour sera différente selon l'ordre.

Si vous l'utilisez comme une expression conditionnelle dans une instruction if, etc., le résultat est considéré comme une valeur booléenne et traité, vous n'avez donc pas à vous en soucier, mais si vous utilisez la valeur de retour pour un traitement ultérieur, vous devez faire attention.

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 voulez le traiter comme vrai ou faux, vous pouvez faire comme dans le dernier exemple.
bool(x and y)

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

xyx and yx or y
truefalseyx
falsetruexy
truetrueyx
falsefalsexy

Court-circuit (évaluation du court-circuit)

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 sera x quelle que soit la valeur de y.

Dans ce cas, y n'est pas évalué.

and,orNotez que si vous appelez une fonction ou une méthode sur le côté droit de ces processus pour effectuer un traitement, le processus peut ne pas être exécuté 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