我有以下代码条件
if len(content_tags) >= 1 or tags_irrelevant == 'yes'\
and lengthproblem == 0\
and guess_language.guessLanguage(testlanguage) == 'en'\
and len(sentences) >= 3:
问题在于逻辑和语法。我希望不管if len(sentences)
不是{},都将其计算为false。但这并没有发生。我想我可能需要一些括号什么的。救命啊!在
Tags:
or
部分导致了您的问题。只需封装:在这种情况下,我过去倾向于使用中间bool将最终逻辑语句抽象到更高的级别,例如:
^{pr2}$[这不是从博客中学到的,而是从调试糟糕的、几十年前遗留代码的痛苦中学到的,这些代码中充斥着if语句和while循环终止条件中的大量条件子句。哦,而且反斜杠也不见了。]
根据python operator precedence rules,和运算符优先于或运算符。这就是说,如果你想让len(句子)>=3部分占主导地位,你应该把剩下的部分放在括号里:
^{} has a higher precidence than ^{} ,所以先对}求值,这意味着您在文本中描述的逻辑不是您在代码中描述的逻辑。在
and
进行求值,然后对{如果您想将第一个
or
作为一个单独的大小写来处理,那么请在它周围加上括号。在也就是说,你还没有给我们详细解释你想要的逻辑行为,所以我建议你坐下来好好解决。在
如果你需要测试你的逻辑,那么使用一个简单的测试函数打印出来,这样你就知道什么东西被评估了,什么时候被评估。在
^{pr2}$您可以清楚地看到,首先计算的是第一个
and
,然后它试图计算and
的左侧,从而得到or
。它试图计算这个值,得到第一个值的True
,因此短路,将True
返回给and
,后者也短路,返回True
(实际上是1,但在本例中是True
)。当括号在那里时,它将按您想要的方式进行计算。在相关问题 更多 >
编程相关推荐