【发布时间】:2022-01-22 12:54:11
【问题描述】:
我正在编写一个拒绝未经授权的用户访问的安全系统。
name = input("Hello. Please enter your name: ")
if name == "Kevin" or "Jon" or "Inbar":
print("Access granted.")
else:
print("Access denied.")
它按预期授予授权用户访问权限,但它也允许未经授权的用户!
Hello. Please enter your name: Bob
Access granted.
为什么会发生这种情况?我已经明确表示,仅当name 等于 Kevin、Jon 或 Inbar 时才授予访问权限。我也试过相反的逻辑,if "Kevin" or "Jon" or "Inbar" == name,但结果是一样的。
注意:这个问题旨在作为这个非常常见问题的规范重复目标。还有另一个热门问题How to test multiple variables against a single value? 有同样的基本问题,但比较的目标是相反的。这个问题不应该作为那个问题的副本来结束,因为这个问题是 Python 新手遇到的,他们可能难以将反向问题的知识应用于他们的问题。
【问题讨论】:
-
这个问题的变种包括
x or y in z、x and y in z、x != y and z和其他一些。虽然与这个问题并不完全相同,但根本原因对所有人来说都是相同的。只是想指出这一点,以防有人将他们的问题作为重复而关闭,并且不确定它与他们有什么关系。
标签: python boolean boolean-expression