Maison >développement back-end >Tutoriel Python >Pourquoi `a == x ou y ou z` est-il toujours évalué à True en 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 :
Utilisez des opérateurs "ou" explicites pour comparer chaque valeur séparément :
if a == x or a == y or a == z: # Correct
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
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!