2

可能重复:
或python中的行为:

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

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

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

4 回答 4

8

正确的方法是这样做:

if 'Bob' in text or 'Hello' in text:
    print 'IF'
else:
    print 'ELSE'

您的代码不起作用的原因是因为 Python 将其评估为:

if ('Bob') or ('Hello' in text):

因为'Bob'总是计算为True,所以你的函数总是打印'IF'

顺便说一句,使用strorstring作为变量名并不好,因为它会覆盖非常有用的内置方法str()或库string

于 2013-01-09T05:06:48.380 回答
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,因为它与 pythons标准库之一发生冲突。

于 2013-01-09T05:07:59.133 回答
1

它的编写方式将有两个测试;第一个测试是if "Bob",第二个测试是"Hello" in stringif str对于任何非空字符串始终为真,因此if "Bob"始终计算为真。

您可以使用if ("Bob" in string) or ("Hello" in string):或使用来解决此问题if any((x in string for x in ["Hello", "Bob"]):

于 2013-01-09T05:10:35.427 回答
0

"Bob" 是一个 3 长度的字符串,它是True当它出现在原因中时。

>>> bool("Bob")
True
>>> bool("")
False

您应该修改为:

if "Bob" in string or "Hello" in string:
    print "IF"
else:
    print "ELSE"
于 2013-01-09T05:18:44.083 回答