我有这样的代码:
if (X or Y) == ("Cat" or "Dog" or "Fish" or "Bird"):
print X, Y
只有在X == "Cat"
. 有人知道我的错误吗?
我有这样的代码:
if (X or Y) == ("Cat" or "Dog" or "Fish" or "Bird"):
print X, Y
只有在X == "Cat"
. 有人知道我的错误吗?
我想你想要这样的逻辑:
animals = ["Cat", "Dog", "Fish", "Bird"]
if X in animals or Y in animals:
print X, Y
在您的代码中,表达式(“Cat”或“Dog”或“Fish”或“Bird”)被视为我确定您不想要的逻辑表达式。碰巧这个表达式的计算结果是“Cat”,它解释了你观察到的行为。
>>> 'cat' or 'dog'
'cat'
>>> 'cat' and 'dog'
'dog'
这些是对字符串的逻辑操作。非空字符串被视为 True 值。空字符串被视为 False。Python 的逻辑运算符返回与操作数相同类型的值(假设两个操作数是相同类型)。短路评估解释了or
和的行为and
。
无论如何,对字符串执行逻辑操作几乎没有意义!
Python 中的or
运算符如果是"trucy"则返回其第一个参数,否则返回其第二个参数。比较的右侧总是评估为,只要是“trucy” "Cat"
,左侧的评估为。X
X
获得您正在寻找的逻辑的最简洁的方法是
if set((X, Y)) & set(("Cat", "Dog", "Fish", "Bird")):
# whatever
发生的事情是你正在锻炼X or Y
,给你公正X
。然后,你正在锻炼Cat or Dog or..
,给你 just Cat
,因为它不是 0。
你想要的是:
if X in ("Cat","Dog", "Fish", "Bird") or Y in ("Cat","Dog", "Fish", "Bird"):
#taa daa!
您的问题在于 Python 评估的方式or
。如果 a 为真(非零、非空字符串或对象),则a or b
返回 a;否则返回 b。所以"string" or b
总是会评估为"string"
。
So"Cat" or "Dog" or "Fish" or "Bird"
将始终评估为"Cat"
,
并且X or Y
将始终评估为X
(只要 X 是一个或多个字符的字符串)
并且X=="Cat"
显然仅当 X 是“Cat”时才为真。
animals = set(["Cat","Dog","Fish","Bird"])
if X in animals or Y in animals:
print X, Y