Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python布尔帮助!_Python_Boolean Operations - Fatal编程技术网

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;)@德尔南,谢谢,但太可惜了,我太过分了!!