論理演算子は、より一般的であるnot
、and
、or
、>
、<
、および==
、理論的には比较运算符的优先级>not>and>or
。
それらの間の関係を明確にするためにand
、or
実行時の特性を明確にする必要があります。コードは次のとおりです。
class Debug:
def mainProgram(self):
self.x0 = 0
self.x1 = 1
self.x2 = 5
print(self.x0 and self.x1) # 0
print(self.x1 and self.x0) # 0
print(self.x1 and self.x2) # 5
print(self.x2 and self.x1) # 1
print(self.x0 or self.x1) # 1
print(self.x1 or self.x0) # 1
print(self.x1 or self.x2) # 1
print(self.x2 or self.x1) # 5
print(self.x1 > self.x0) # True
print(self.x1 < self.x0) # False
print(self.x1 == self.x0) # False
if __name__ == "__main__":
main = Debug()
main.mainProgram()
プログラミング言語には規則があり、0はデフォルトでFalseになり、0以外の数値はデフォルトでTrueになることがわかっています。上記のコードから、私たちがいることを見ることができるself.x0
値0
の変数があり、self.x1
値は1
、self.x2
値があります5
。self.x0 and self.x1
値0
、self.x1 and self.x0
0の値は、我々が表示and
結果をTrue and False
常にFalse
ますが、0
同等の意味でのFalse
(コードは同じではないことに注意)、これに関係なく、スワップしないself.x1 and self.x0
ためにかどうか、結果は0
稀に。ただし、注文self.x1
のself.x2
時間を交換すると、値が2番目の位置に出力されることがわかりました。これもよく理解されています。これは、ゼロ以外の整数が感覚True
に等しいためTrue and True
、結果はTrue
であり、コードはand
前後に2つ必要です。両方の条件を新たに判定し、最終的に2位の結果を出力します。次に、順序が逆になっていてもいなくてもself.x0 or self.x1
、値は同じであることがわかり1
ます。これも非常に理解しやすいTrue or False
結果なTrue
のでTrue
、結果を保持する必要があり1
ます。最終結果はです。次に、self.x1 or self.x2
順序を変更する1
とself.x2 or self.x1
、出力結果は5
であり、デフォルトではpython の出力結果が最初の位置の結果であることがわかります。このことから、次の結論が得られます。Pythonでは、and論理演算子は、andの前後の条件がすべてtrueの場合、次の条件の結果を出力し、現在の条件が1つのtrueと1つのfalseの場合、出力条件はfalseです。or論理演算子は、orの前後の条件がtrueの場合、前の条件の結果を出力し、現在の条件が1つのtrueと1つのfalseの場合、出力条件はtrueです。比較演算子の結果は通常TrueまたはFalseです。
次は、私たちは、上記の結論を探求するために使用するand
、、 、、or
および優先順位論理演算。まず、我々は、三つのカテゴリーにそれらを分け、クラスとして、クラスとしてクラス、比較演算子として、としてだけでなく、次のように、としてクラス:>
<
==
not
and
or
>
<
==
class Debug:
def mainProgram(self):
self.x0 = 0
self.x1 = 1
self.x2 = 5
print(self.x1 > self.x0 and self.x2) # 5
print(self.x1 < self.x0 and self.x2) # False
if __name__ == "__main__":
main = Debug()
main.mainProgram()
self.x1 > self.x0 and self.x2
出力結果はで5
ありself.x1 < self.x0 and self.x2
、結果はであることがわかりFalse
ます。self.x1 > self.x0 and self.x2
比較演算子については、比較演算子の優先度が高い場合、最初にself.x1 > self.x0
条件付き判断を実行し、結果をにしTrue
、次に実行結果True and 5
(変数self.x2
の値5
)を、これまで常に感じていた法則に従う必要があります5
。以下の場合self.x1 < self.x0 and self.x2
、self.x1 < self.x0
結果はFalse
、そしてFalse and 5
その結果は、以前の法律に基づいてする必要がありますFalse
。では、比較演算子の優先度が低い場合はどうなるand
でしょうか。self.x1 > self.x0 and self.x2
用語、self.x0 and self.x2
結果が0
、1 > 0
結果はTrue
、最終的な結果がでなければなりませんTrue
、明らかに我々が得た結果と一致しません、。これから、比較演算子の優先度がandよりも高いことがわかります。
コードを記述するときによく使用する条件ステートメントについて考えてみてくださいif x > 30 and x < 100:
。通常and
、比較演算子の両側の条件部分に括弧を追加しません。これは、比較演算子の優先度が高いためでもありand
ます。
次に、not
演算子をor
優先演算子と比較します。コードは以下のように表示されます:
class Debug:
def mainProgram(self):
self.x1 = 1
print(not self.x1 or self.x1) # 1
if __name__ == "__main__":
main = Debug()
main.mainProgram()
私たちは、最終的な出力結果があることがわかり1
仮想的なことをor
オペレータが優先順位が高い、self.x1 or self.x1
結果がどうあるべき1
、とnot 1
の結果がでなければなりません0
。私たちは、より高い優先度を想定していないと、出力結果は、その後、されていないnot self.x1
としてnot 1
の結果0
、0 or 1
結果は1
我々の結果と一致し、このため、締結作業の優先順位や演算子よりも高い優先度ではありません。
次に、演算子の優先度と演算子and
の優先度を比較しますor
。コードは以下のように表示されます:
class Debug:
def mainProgram(self):
self.x0 = 0
self.x1 = 1
self.x2 = 2
print( self.x0 and self.x1 or self.x2) # 2
print( self.x1 and self.x0 or self.x2) # 2
if __name__ == "__main__":
main = Debug()
main.mainProgram()
or
優先度が高いと仮定します。なぜなら、self.x0 and self.x1 or self.x2
以前の法則に従ってself.x1 or self.x2
結果が要約されている1
ためself.x0 and 1
、結果0
と私たちの結果2
が一致しないためです。したがって、or
演算子の優先順位がよりも低いことをさらに考慮してくださいand
。self.x0 and self.x1
結果は0
、0 or self.x2
結果は2
です。さらなるself.x1 and self.x0 or self.x2
検証を行うことができ、ここでは議論プロセスは省略されます。最後に、and演算子の優先順位がor演算子の優先順位よりも大きいという結論に達しました。
同様に、次のコードを使用して、not
演算子とand
演算子の優先度を比較します。
class Debug:
def mainProgram(self):
self.x0 = 0
self.x1 = 1
print(not 0) # True
print(not 1) # False
print(not self.x0 and self.x1) # 1
if __name__ == "__main__":
main = Debug()
main.mainProgram()
and
優先度が高い場合、最終的な出力結果はTrue
またはFalse
であり、現在の出力結果は数値であるためnot
、優先度が高いおよびであることが簡単にわかりand
ます。
最後に、比較演算子とnot
演算子の優先順位関係を確認し、これを使用して、これらの4つのタイプの演算の優先順位を決定する必要があります。コードは次のとおりです。
class Debug:
def mainProgram(self):
self.x0 = 0
self.x1 = 1
print(not 0) # True
print(True > 1) # False
print(not self.x0 > self.x1) # True
if __name__ == "__main__":
main = Debug()
main.mainProgram()
テストするTrue > 1
と、出力結果はFalse
であることがわかります。そのため、比較演算子の優先度はnot演算子よりも高いと推測できます。場合なのでnot
オペレータの優先順位が高くなって、not self.x0
結果はTrue
、とTrue > 1
結果があるFalse
ことがTrue
、結果は一致しません我々は最終的に取得する。比較演算子の優先順位が高い場合、self.x0 > self.x1
結果はFalse
というnot False
結果はTrue
、これを確認以前の推論。
また、同じ型の演算子の場合、演算の順序は左から右への実行順序に従います。演算の順序を変更したい場合は、括弧を追加してください。
便利だと思ったら手を挙げていいねしてもらい、もっと多くの人に見てもらいたいです〜