我有这样的代码:Python布尔帮助!
if (X or Y) == ("Cat" or "Dog" or "Fish" or "Bird"):
print X, Y
它只有X == "Cat"
工作。有人在这里知道我的错误吗?
我有这样的代码:Python布尔帮助!
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' or 'dog'
'cat'
>>> 'cat' and 'dog'
'dog'
这些都是串逻辑运算。非空字符串被视为真值。空字符串被视为False。 Python的逻辑运算符返回与操作数相同类型的值(假设两个操作数都是相同的类型)。短路评估解释了这里的or
和and
的行为。
在任何情况下,对字符串执行逻辑操作都没有意义!
发生什么事是你正在努力X or Y
,给你只是X
。然后,你正在制定Cat or Dog or..
,只给你Cat
,因为它不是0。
你想要的是:
if X in ("Cat","Dog", "Fish", "Bird") or Y in ("Cat","Dog", "Fish", "Bird"):
#taa daa!
如果是"trucy",或它的第二个参数否则or
运营商在Python返回第一个参数。比较的右侧始终评估为"Cat"
,而左侧为X
,只要X
为“真实”。
用最简洁的方式来获得你正在寻找的逻辑是
if set((X, Y)) & set(("Cat", "Dog", "Fish", "Bird")):
# whatever
我给你+1,但我达到了我的选票限额。 – 2011-03-11 16:31:21
您的问题是在Python评估or
的方式。如果a是真(非零,或非空字符串或对象)返回一个;否则返回b。所以"string" or b
将始终评估为"string"
。
所以"Cat" or "Dog" or "Fish" or "Bird"
将始终评估为"Cat"
,
和X or Y
将始终评估为X
(只要X是一个或多个字符的字符串)
和X=="Cat"
显然,只有当X是“猫”真。
animals = set(["Cat","Dog","Fish","Bird"])
if X in animals or Y in animals:
print X, Y
现在这是一个伟大的写作。享受这个当之无愧的+1;) – delnan 2011-03-11 16:33:20
@delnan谢谢,但太糟糕了,我超过了帽子! – 2011-03-11 16:34:09