andはよりも精度が高いorため、andsが最初に評価され、次に、が評価さ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。次に、の左側を評価しようとし、andを取得しorます。これを評価しようとしTrue、最初の値を取得するため、短絡Trueして、に戻りますand。これも短絡して戻りTrueます(実際には、1ですがTrue、この例では)。角かっこがある場合は、希望どおりに評価されます。