and
具有比 更高or
的优先级,因此and
首先评估 s,然后评估or
,这意味着您在文本中描述的逻辑不是您在代码中描述的逻辑。
如果您希望将第or
一个案例视为单个案例,请在其周围使用括号。
if (len(content_tags) >= 1 or tags_irrelevant == 'yes')\
and lengthproblem == 0\
and guess_language.guessLanguage(testlanguage) == 'en'\
and len(sentences) >= 3:
也就是说,您还没有向我们详细解释您想要从中获得的逻辑行为,所以我建议您坐下来好好地解决这个问题。
如果你需要测试你的逻辑,那么使用一个简单的测试函数打印出来,这样你就知道什么时候被评估了。
>>> def test(bool):
... print(bool)
... return bool
...
>>> if test(1) or test(2) and test(3) and test(4) and test(False):
... print("Success")
...
1
Success
>>> if (test(1) or test(2)) and test(3) and test(4) and test(False):
... print("Success")
...
1
3
4
False
你可以清楚地看到第一个被评估的是第一个and
,然后它会尝试评估左边的 theand
等等or
。它尝试对此进行评估,获取True
第一个值,然后短路,返回True
到and
,它也短路,返回True
(嗯,实际上是 1,但True
出于本示例的目的)。当括号在那里时,它会以您想要的方式进行评估。