Maison >développement back-end >Tutoriel Python >Pourquoi `a == x ou y ou z` est-il toujours évalué à True en Python ?

Pourquoi `a == x ou y ou z` est-il toujours évalué à True en Python ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-31 04:35:17740parcourir

Why Does `a == x or y or z` Always Evaluate to True in Python?

L'erreur "a == x ou y ou z"

Lorsque vous essayez de comparer une variable à plusieurs valeurs, il est tentant d'utiliser Opérateurs logiques de Python, comme dans :

if a == x or y or z:  # Incorrect

Cependant, cette expression sera toujours évaluée à True, quelle que soit la valeur de un. En effet, l'opérateur "ou" dans ce contexte ne se comporte pas comme prévu.

Comment fonctionne l'opérateur "ou"

L'opérateur "ou" de Python (|) sera évalué à True si l'un de ses opérandes est True. Ainsi, dans l'expression ci-dessus, puisque l'un des x, y ou z est toujours vrai (une valeur non vide est vraie en Python), l'expression est évaluée à vrai quelle que soit la valeur de a.

Façons correctes de comparer à plusieurs valeurs

Pour comparer correctement une variable à plusieurs valeurs, il existe plusieurs options :

  • Opérateurs "ou" explicites :

Utilisez des opérateurs "ou" explicites pour comparer chaque valeur séparément :

if a == x or a == y or a == z:  # Correct
  • Ensembles ou Listes :

Créez un ensemble ou une liste de valeurs valides et utilisez l'opérateur "in" pour vérifier l'appartenance :

if a in {"Kevin", "Jon", "Inbar"}:  # Correct
  • Expression du générateur et "any()":

Utilisez une expression génératrice avec "any()" pour vérifier explicitement chacun value :

if any(a == auth for auth in ["Kevin", "Jon", "Inbar"]):  # Correct

Considérez les performances

Pour les performances, l'utilisation d'ensembles ou de listes avec l'opérateur "in" est généralement l'option la plus rapide. Les expressions génératrices utilisant "any()" sont les plus verbeuses et les plus lentes.

Exemple d'utilisation

Pour accorder l'accès uniquement aux utilisateurs autorisés :

authorized_names = {"Kevin", "Jon", "Inbar"}
name = input("Please enter your name: ")
if name in authorized_names:
    print("Access granted.")
else:
    print("Access denied.")

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn