Python布尔帮助!
我有这样一个代码:Python布尔帮助!,python,boolean-operations,Python,Boolean Operations,我有这样一个代码: if (X or Y) == ("Cat" or "Dog" or "Fish" or "Bird"): print X, Y animals = ["Cat", "Dog", "Fish", "Bird"] if X in animals or Y in animals: print X, Y 只有当X==“Cat”时,它才起作用。有人知道我的错误吗?我想你需要这样的逻辑: if (X or Y) == ("Cat" or "Dog" or "Fish"
if (X or Y) == ("Cat" or "Dog" or "Fish" or "Bird"):
print X, Y
animals = ["Cat", "Dog", "Fish", "Bird"]
if X in animals or Y in animals:
print X, Y
只有当
X==“Cat”
时,它才起作用。有人知道我的错误吗?我想你需要这样的逻辑:
if (X or Y) == ("Cat" or "Dog" or "Fish" or "Bird"):
print X, Y
animals = ["Cat", "Dog", "Fish", "Bird"]
if X in animals or Y in animals:
print X, Y
在您的代码中,表达式(“Cat”或“Dog”或“Fish”或“Bird”)被视为逻辑表达式,我相信您不希望这样。碰巧,这个表达式的计算结果是“Cat”,这解释了你观察到的行为
这些是对字符串的逻辑操作。非空字符串被视为真值。空字符串被视为False。Python的逻辑运算符返回与操作数相同类型的值(假设两个操作数的类型相同)。短路评估在此解释了
或
和和
的行为
在任何情况下,对字符串执行逻辑操作都毫无意义 发生的事情是你正在计算
X或Y
,只给你X
。然后,您正在计算猫或狗或..,只给您Cat
,因为它不是0
你想要的是:
if X in ("Cat","Dog", "Fish", "Bird") or Y in ("Cat","Dog", "Fish", "Bird"):
#taa daa!
Python中的
或
运算符返回第一个参数(如果是),或者返回第二个参数(否则)。只要X
为“trucy”,比较的右侧始终计算为“Cat”
,左侧计算为X
获取所需逻辑的最简洁方法是
if set((X, Y)) & set(("Cat", "Dog", "Fish", "Bird")):
# whatever
您的问题在于Python计算
或的方式。如果a是真的(不是零,或非空字符串,或对象)a或b
返回a;否则返回b。所以“string”或b将始终计算为“string”
所以“猫”或“狗”或“鱼”或“鸟”
将始终计算为“猫”
,
并且X或Y
将始终计算为X
(只要X是由一个或多个字符组成的字符串)
而X==“Cat”
显然只有当X是“Cat”时才是真的
现在这是一部伟大的作品。享受这个当之无愧的+1;)@德尔南,谢谢,但太可惜了,我太过分了!!