Python - 正确使用OR功能

时间:2013-01-09 05:04:45

标签: python

  

可能重复:
  OR behaviour in python:

可能非常基本,但在搜索后我有点卡住了。对我来说,这行代码应该导致它打印“ELSE”,因为字符串不包含任何单词。显然它不是那么简单,似乎无法弄清楚原因。我已确保将字符串拆分为一个列表,以便更容易搜索。我做错了什么?

string = "Johnny Was Here Yesterday"
string = string.split()

if "Bob" or "Hello" in string:
    print "IF"
else:
    print "ELSE"

4 个答案:

答案 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'

顺便说一句,使用strstring作为变量名称并不好,因为它会覆盖非常有用的内置方法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"