python中的多条件语法

2024-09-30 01:23:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下代码条件

 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: orand代码leniftagssentencescontent
3条回答

or部分导致了您的问题。只需封装:

if (len(content_tags) >= 1 or tags_irrelevant == 'yes')\
   and lengthproblem == 0\
   and guess_language.guessLanguage(testlanguage) == 'en'\
   and len(sentences) >= 3:

在这种情况下,我过去倾向于使用中间bool将最终逻辑语句抽象到更高的级别,例如:

^{pr2}$

[这不是从博客中学到的,而是从调试糟糕的、几十年前遗留代码的痛苦中学到的,这些代码中充斥着if语句和while循环终止条件中的大量条件子句。哦,而且反斜杠也不见了。]

根据python operator precedence rules运算符优先于运算符。这就是说,如果你想让len(句子)>=3部分占主导地位,你应该把剩下的部分放在括号里:

if (len(content_tags) >= 1 or tags_irrelevant == 'yes' and lengthproblem ==0 and guess_language.guessLanguage(testlanguage) =='en') and len(sentences) >= 3

^{} has a higher precidence than ^{},所以先对and进行求值,然后对{}求值,这意味着您在文本中描述的逻辑不是您在代码中描述的逻辑。在

如果您想将第一个or作为一个单独的大小写来处理,那么请在它周围加上括号。在

if (len(content_tags) >= 1 or tags_irrelevant == 'yes')\
   and lengthproblem == 0\
   and guess_language.guessLanguage(testlanguage) == 'en'\
   and len(sentences) >= 3:

也就是说,你还没有给我们详细解释你想要的逻辑行为,所以我建议你坐下来好好解决。在

如果你需要测试你的逻辑,那么使用一个简单的测试函数打印出来,这样你就知道什么东西被评估了,什么时候被评估。在

^{pr2}$

您可以清楚地看到,首先计算的是第一个and,然后它试图计算and的左侧,从而得到or。它试图计算这个值,得到第一个值的True,因此短路,将True返回给and,后者也短路,返回True(实际上是1,但在本例中是True)。当括号在那里时,它将按您想要的方式进行计算。在

相关问题 更多 >

    热门问题