Python 3のブール論理を理解する

前書き

ブールデータ型は、TrueまたはFalseの2つの値のいずれかになります。 プログラミングでブールを使用して、比較を行い、プログラムのフローを制御します。

ブールは、数学の論理分岐に関連付けられている真理値を表し、コンピューターサイエンスのアルゴリズムに通知します。 数学者のジョージブールにちなんで名付けられたブールという言葉は、常に大文字のBで始まります。 値TrueFalseも、Pythonの特別な値であるため、常にそれぞれ大文字のTとFになります。

このチュートリアルでは、ブール値の比較、論理演算子、真理値表など、ブール値の仕組みを理解するために必要な基本事項について説明します。

比較演算子

プログラミングでは、比較演算子を使用して値を比較し、TrueまたはFalseの単一のブール値に評価します。

次の表は、ブール比較演算子を示しています。

オペレーター その意味

==

に等しい

!=

等しくない

<

未満

>

より大きい

より小さいか等しい

>=

以上

これらの演算子がどのように機能するかを理解するために、Pythonプログラムの2つの変数に2つの整数を割り当てましょう。

x = 5
y = 8

この例では、xの値は5であるため、8の値を持つyよりも小さいことがわかります。

これらの2つの変数とそれに関連する値を使用して、上の表の演算子を見てみましょう。 プログラムでは、各比較演算子がTrueまたはFalseのどちらに評価されるかを出力するようPythonに依頼します。 私たちや他の人間がこの出力をよりよく理解できるように、Pythonにstringを出力させて、評価対象を示します。

x = 5
y = 8

print("x == y:", x == y)
print("x != y:", x != y)
print("x < y:", x < y)
print("x > y:", x > y)
print("x <= y:", x <= y)
print("x >= y:", x >= y)
Outputx == y: False
x != y: True
x < y: True
x > y: False
x <= y: True
x >= y: False

上記の各式において、数学的な論理に従って、Pythonは以下を評価しました:

  • 5(x)は8(y)に等しいですか? False

  • 5は8と等しくありませんか? True

  • 5は8未満ですか? True

  • 5は8よりも大きいですか? False

  • 5は8以下ですか? True

  • 5は8以下ではありませんか? False

ここでは整数を使用しましたが、それらをfloat値で置き換えることもできます。

文字列はブール演算子でも使用できます。 追加のstring methodを使用しない限り、大文字と小文字が区別されます。

実際に文字列を比較する方法を見ることができます。

Sammy = "Sammy"
sammy = "sammy"

print("Sammy == sammy: ", Sammy == sammy)
OutputSammy == sammy:  False

上記の文字列"Sammy"は、完全に同じではないため、文字列"sammy"と等しくありません。 1つは大文字のSで始まり、もう1つは小文字のsで始まります。 ただし、"Sammy"の値が割り当てられている別の変数を追加すると、それらは等しいと評価されます。

Sammy = "Sammy"
sammy = "sammy"
also_Sammy = "Sammy"

print("Sammy == sammy: ", Sammy == sammy)
print("Sammy == also_Sammy", Sammy == also_Sammy)
OutputSammy == sammy:  False
Sammy == also_Sammy:  True

><などの他の比較演算子を使用して、2つの文字列を比較することもできます。 Pythonは、文字のASCII値を使用して、これらの文字列を辞書的に比較します。

比較演算子を使用してブール値を評価することもできます。

t = True
f = False

print("t != f: ", t != f)
Outputt != f:  True

上記のコードブロックは、TrueFalseと等しくないと評価しました。

2つの演算子===の違いに注意してください。

x = y   # Sets x equal to y
x == y  # Evaluates whether x is equal to y

最初の=は代入演算子であり、ある値を別の値と等しく設定します。 2番目の==は、2つの値が等しいかどうかを評価する比較演算子です。

論理演算子

値を比較するために使用される3つの論理演算子があります。 式をブール値まで評価し、TrueまたはFalseのいずれかを返します。 これらの演算子はandor、およびnotであり、以下の表で定義されています。

オペレーター その意味 それはどのようなものか

and

両方が真の場合は真

x and y

or

少なくとも1つが真の場合は真

x or y

not

falseの場合にのみtrue

not x

論理演算子は通常、2つ以上の式が真であるかどうかを評価するために使用されます。 たとえば、学生がコースに登録されているandを成績が合格しているかどうかを判断するために使用できます。両方のケースが当てはまる場合、学生にはシステムで成績が割り当てられます。 もう1つの例は、過去6か月間にストアクレジットorが購入したかどうかに基づいて、ユーザーがオンラインショップの有効なアクティブ顧客であるかどうかを判断することです。

論理演算子の仕組みを理解するために、3つの式を評価してみましょう。

print((9 > 7) and (2 < 4))  # Both original expressions are True
print((8 == 8) or (6 != 6)) # One original expression is True
print(not(3 <= 1))          # The original expression is False
OutputTrue
True
True

最初のケースであるprint((9 > 7) and (2 < 4))では、and演算子が使用されていたため、9 > 72 < 4の両方がTrueと評価される必要がありました。

2番目のケースであるprint((8 == 8) or (6 != 6))では、8 == 8がTrueと評価されたため、or演算子が使用されたため、6 != 6がFalseと評価されても違いはありませんでした。 and演算子を使用した場合、これはFalseと評価されます。

3番目のケースであるprint(not(3 <= 1))では、not演算子は3 <=1が返すFalse値を否定します。

整数の代わりにフロートを使用して、偽評価を目指しましょう。

print((-0.2 > 1.4) and (0.8 < 3.1)) # One original expression is False
print((7.5 == 8.9) or (9.2 != 9.2)) # Both original expressions are False
print(not(-5.7 <= 0.3))             # The original expression is True

上記の例では、

  • andには、少なくとも1つのFalse式がFalseと評価される必要があります。

  • orでは、両方の式をFalseと評価する必要があります。

  • 新しい式がFalseと評価されるためには、notの内部式がTrueである必要があります。

上記の結果が不明確に思われる場合は、以下のtruth tablesをいくつか調べて、速度を上げます。

andor、およびnotを使用して複合ステートメントを作成することもできます。

not((-0.2 > 1.4) and ((0.8 < 3.1) or (0.1 == 0.1)))

最初に最も内側の式(0.8 < 3.1) or (0.1 == 0.1)を見てみましょう。 両方の数学ステートメントがTrueであるため、この式はTrueと評価されます。

これで、戻り値Trueを取得し、それを次の内部式(-0.2 > 1.4) and (True)と組み合わせることができます。 この例では、数学ステートメント-0.2 > 1.4がFalseであり、(False) and (True)がFalseを返すため、Falseが返されます。

最後に、外部式not(False)があります。これはTrueと評価されるため、このステートメントを出力した場合の最終的な戻り値は次のとおりです。

OutputTrue

論理演算子andor、およびnotは式を評価し、ブール値を返します。

真理値表

数学の論理分岐について学ぶことはたくさんありますが、プログラミング時のアルゴリズム的思考を改善するために、その一部を選択的に学ぶことができます。

以下は、比較演算子==、および各論理演算子andor、およびnotの真理値表です。 あなたはそれらを推論することができるかもしれませんが、プログラミングの意思決定プロセスをより速くすることができるので、それらを暗記するように働くことも役立ちます。

==真理値表

x == y 返品

True

==

True

True

True

==

==

True

==

True

AND真理値表

x and y 返品

True

and

True

True

True

and

and

True

and

OR真理値表

x or y 返品

True

or

True

True

True

or

True

or

True

True

or

真理値表ではありません

not x 返品

not

True

not

True

真理値表は、ロジックで使用される一般的な数学的な表であり、コンピュータープログラミングでアルゴリズム(命令)を作成するときに、覚えたり覚えたりするのに役立ちます。

フロー制御にブール演算子を使用する

フロー制御ステートメントの形式でプログラムのストリームと結果を制御するには、conditionの後にclauseを使用できます。

conditionは、TrueまたはFalseのブール値まで評価され、プログラムで決定が行われるポイントを示します。 つまり、条件は、何かがTrueまたはFalseに評価されるかどうかを示します。

clauseは、conditionに続くコードのブロックであり、プログラムの結果を指示します。 つまり、「xがTrueの場合、これを実行する」という構成のdo this部分です。

以下のコードブロックは、Pythonプログラムのフローを制御するためにconditional statementsと連携して動作する比較演算子の例を示しています。

if grade >= 65:                 # Condition
    print("Passing grade")      # Clause

else:
    print("Failing grade")

このプログラムは、各生徒の成績が合格か不合格かを評価します。 成績が83の学生の場合、最初のステートメントはTrueと評価され、Passing gradeのprintステートメントがトリガーされます。 成績が59の学生の場合、最初のステートメントはFalseと評価されるため、プログラムは次に進み、else式に関連付けられたprintステートメントを実行します。Failing grade

PythonのすべてのオブジェクトはTrueまたはFalseに評価できるため、PEP 8 Style Guideは、値をTrueまたはFalseと比較しないことをお勧めします。これは、読みにくく、予期しないブール値を返すことが多いためです。 つまり、プログラムでif sammy == True:を使用してavoidを実行する必要があります。 代わりに、sammyを、ブール値を返す別の非ブール値と比較してください。

ブール演算子は、フロー制御ステートメントを介してプログラムの最終結果を決定するために使用できる条件を提示します。

結論

このチュートリアルでは、ブール型に属する比較演算子と論理演算子、および真理値表を使用して、プログラムフロー制御にブール値を使用しました。

「https://www.digitalocean.com/community/tutorials/understanding-data-types-in-python-3[Understanding Data Types]」チュートリアルで他のデータ型の詳細を学び、条件文について読むことができます。 「https://www.digitalocean.com/community/tutorials/how-to-write-conditional-statements-in-python-3-2 [条件ステートメントの記述方法]チュートリアル」。