当IN语句明显不应该是真的时,为什么它是真的? (很有意义(一旦你知道))

时间:2016-06-02 14:05:20

标签: python-3.x

我正在编写一段不可思议的简单代码来检查输入文本字符串中的单词,但是当它显然应该返回false并且我已经测试了不同版本的代码几小时后IN返回true并且无法解释为什么会发生这种情况?!?

    >>> y= "yeh im gonna lose my mind over this"
    >>> if "screen" or "display" or "crack" or "smash" in y:
    ...     print ("Y does this happen?")
    ... 
    Y does this happen? #Output
编辑:我认为这个问题是可行的而不是重复的,因为它需要循环中IN和OR语句的排序信息,而前一个问题我认为只是在IN语句中要求一个简单的答案。

3 个答案:

答案 0 :(得分:1)

您可能没有按预期使用in

if "screen" in y or "display" in y or "crack" in y or "smash" in y

您已完成的操作将始终返回True,因为非空字符串的真值为True

因此if "screen"会返回True,无论其他人是什么,if始终评估为True

答案 1 :(得分:1)

您可能需要any测试:

In [1]: y = "yeah I'm gonna lose my mind over this"

In [2]: if any(word in y for word in ('screen', 'display', 'crack', 'smash')):
   ...:     print('why does this happen?')
   ...: else:
   ...:     print("it doesn't ;)")
   ...:
it doesn't ;)

In [3]: if any(word in y for word in ('yeah', 'screen', 'display', 'crack', 'smash')):
   ...:     print('now it happens')
   ...:
now it happens

答案 2 :(得分:0)

or已被评估,并且低于优先级而不是in语句,这意味着您的陈述

if "screen" or "display" or "crack" or "smash" in y

评估为

if "screen" or ("display" or ("crack" or ("smash" in y)))

由于“screen”是一个真值,or“返回True”并且从不评估剩余的条件。