可能重复:
OR behaviour in python:
可能非常基本,但在搜索后我有点卡住了。对我来说,这行代码应该导致它打印“ELSE”,因为字符串不包含任何单词。显然它不是那么简单,似乎无法弄清楚原因。我已确保将字符串拆分为一个列表,以便更容易搜索。我做错了什么?
string = "Johnny Was Here Yesterday"
string = string.split()
if "Bob" or "Hello" in string:
print "IF"
else:
print "ELSE"
答案 0 :(得分:8)
正确的方法是这样做:
if 'Bob' in text or 'Hello' in text:
print 'IF'
else:
print 'ELSE'
您的代码不起作用的原因是因为Python将其评估为:
if ('Bob') or ('Hello' in text):
由于'Bob'
始终评估为True
,因此您的函数始终会打印'IF'
顺便说一句,使用str
或string
作为变量名称并不好,因为它会覆盖非常有用的内置方法str()
或者图书馆string
。
答案 1 :(得分:4)
在Python中,非空字符串计算为True。
您的if
语句解释如下:
if ("Bob") or ("Hello" in string"):
由于"Bob"
是非空字符串,因此该语句的结果始终为True
。
您应该使用类似
的内容if "Bob" in string or "Hello" in string:
或
if any(map(lambda x: x in string, ["Bob", "Hello"]))
如其他答案中所述,您可能希望重新考虑使用变量名string
,因为它与其中一个蟒standard libraries发生冲突。
答案 2 :(得分:1)
它的编写方式,将有两个测试;第一个测试是if "Bob"
,第二个测试是"Hello" in string
。对于任何非空字符串,if str
始终为true,因此if "Bob"
始终求值为true。
您可以使用if ("Bob" in string) or ("Hello" in string):
或使用if any((x in string for x in ["Hello", "Bob"]):
来解决此问题。
答案 3 :(得分:0)
“Bob”是一个3长度的字符串,当它在原因中时为True
。
>>> bool("Bob")
True
>>> bool("")
False
您应该修改为:
if "Bob" in string or "Hello" in string:
print "IF"
else:
print "ELSE"