論理演算子(分岐処理3)

学習の目的

  • 1. 論理演算子とは

  • 2. and(かつ)

  • 3. or(または)

  • 4. not(否定)

  • 5. フローチャートを論理演算式を使って表してみよう

  • 6. Pythonで論理演算子を記述する

  • 7. フローチャートの条件を完成させよう

1. 論理演算子とは

分岐処理での条件式で利用する論理演算子は条件式を組み合わせて真(True)か偽(False)を判断する仕組みです。

論理回路で学習した論理演算(AND,OR,NOT)とは異なり、ビットごとの計算をするものではありません。

論理演算子には次の3つがあります。

  • and(かつ)
  • or(または)
  • not(否定)

前に勉強した論理回路にも「and」や「or」とかあったよね。

どう違うのだろう?

論理回路で学習した論理演算は、「0」と「1」のビット単位での計算でした。

条件で使う論理演算子は、とても似ていますがビット単位での計算ではありません。

ただし、計算の意味としては似ている部分もあるので、間違えないようにきちんと勉強しましょう。

それぞれどのような演算か確認しましょう。

2. and(かつ)

論理演算子の「and」は次のように利用します。

条件式1 and 条件式2

条件式1と条件式2の結果がいずれも「真(True)」である場合に条件式全体が真(True)になります。

例えばテストの点数を表す変数を「score」とした場合

score >= 60 and score <= 80

とした場合、テストの点数(変数score)が、60 以上 80 以下の時に真になります。

論理回路のANDも「1」と「1」の時だけ「1」だったので似ていますね。

そうですね。「1」は真なので、二つとも真の場合だけ真になるところは同じです。

「and」は「かつ」と覚えておきましょう。例えば「条件A かつ 条件B」と言われたら条件Aと条件Bの両方が成立していることになりますよね。

本当だ。「かつ」というと両方が成立しているということですね。

3. or(または)

論理演算子の「or」は次のように利用します。

条件式1 or 条件式2

条件式1と条件式2の結果のいずれか一方「真(True)」もしくは両方が「真(True)」である場合に条件式全体が真(True)になります。

例えばテストの点数を表す変数を「score」とした場合

score >= 80 or score <= 20

とした場合、テストの点数(変数score)が、80 以上か 20 以下の時に真になります。

これも論理回路のORと似てますね。ORは「0」と「0」の時以外は「1」でした。

そうですね。論理演算子の or も「偽(False)」と「偽(False)」の時以外は「真(True)」です。

「or」は「または」と覚えておきましょう。例えば「条件A または 条件B」と言われたら条件Aと条件Bの少なくともどちらか一方が成立していればよいことになりますよね。

本当だ。「または」と覚えるとわかりやすいですね。

4. not(否定)

論理演算子の「not」は次のように利用します。

not(条件式1)

条件式1の結果が「真(True)」なら「偽(False)」になり、条件式1が「偽(False)」の時は「真(True)」になります。

例えばテストの点数を表す変数を「score」とした場合

not(score >= 80)

とした場合、テストの点数(変数score)が、80 以上であれば「偽(False)」、80未満であれば「真(True)」になります。

これも論理回路のNOTと似てますね。NOTは「0」と「1」が反転してました。

そうですね。論理演算子の not も条件が逆になります。条件式が「真(True)」の時は「偽(False)」になり条件式が「偽(False)」の時に「真(True)」になります。

notは紛らわしいので、条件が複雑になりやすいので注意して使いましょう。

わからなくなりそう・・・

5. フローチャートを論理演算式を使って表してみよう

前述のフローチャートの判断部分を確認してみましょう。

変数kingaku に1000が代入されている条件に注目してみましょう。

2つの条件がありますが、どんな条件ですか?

1つは「age >= 65」、もう一つは「age >= 15」が「No」だから「age < 15」の時です。

1000が入るのは、その2つの条件が両方成立しているときですか?それともそれぞれの時ですか?

えーっと、65以上でも15未満でもどちらでもよいから・・・「or」で表せる?

よくできました。この条件は or を使って表すことができます。

or を使って書き直すと次のようになります。

or を使った方がすっきりしてわかりやすいですね。

これをPythonでどのようにして書くのかな?

Pythonでも論理演算を記述することができます。Pythonでの記述方法を学習しましょう。

6. Pythonで論理演算子を記述する

Pythonでも論理演算子はフローチャートの時と同じように「and」、「or」、「not」を使います。

それぞれ例題と共に確認します。


and演算子

and演算子は、2つの条件が共に真(True)の時だけ全体の条件が真(True)になる演算子です。

例えば、得点(変数score)が70点以上 かつ 欠席(変数absences)が5回未満であれば合格を表示するプログラムは次のように記述します。

score = 80
absences = 2

if score >= 70 and absences < 5:
    print("合格")

「and」は2つの条件が真(True)でなければ成立しませんので、scoreの値を 70 未満にしたり、absencesの値を 6 以上にしたり、どれか一つでも条件を偽(False)にすると「合格」と表示されません。

Google Colabを使って変数の値を変えながら実行して確かめましょう。


or演算子

or演算子は、2つの条件のうち少なくとも一方の条件が真(True)の時に全体の条件が真(True)になる演算子です。

例えば、得点(変数score)が70点以上 または 欠席(変数absences)が0回であれば合格を表示するプログラムは次のように記述します。

score = 80
absences = 2

if score >= 70 or absences == 0:
    print("合格")

「or」は2つの条件のうち一方が真(True)であれば成立します。scoreの値を 70 未満にしたり、absencesの値を 0 以外にして、条件がどちらか一方だけ真(True)、ともに偽(False)の条件を作ってみましょう。

Google Colabを使って変数の値を変えながら実行して確かめましょう。


not演算子

not演算子は、条件の真(True)と偽(False)を反対にする演算子です。

例えば、得点(変数score)が70点未満でない場合に合格と表示するプログラムは次のように記述します 。

score = 80

if not(score < 70):
    print("合格")

not演算子は、反対にしたい条件を「カッコ( )」で囲み、カッコの前にnotを記述することで、条件を反対にしています。

Google Colabを使って変数の値を変えながら実行して確かめましょう。

7. フローチャートの条件を完成させよう

次のフローチャーの空欄を埋めて、条件を完成させましょう。空欄には「and」、「or」のいずれかが入ります。

問題1

金額(pay)が3000円以上 または 商品点数(count)が5点以上であれば割引(discount)に10%を設定し、そうでなければ0%を設定する。

問題2

気温(temperature)が25℃以上 かつ 水温(water_temp)が22℃以上の時にプールの利用を判定(possible)を「True」を設定し、そうでないな場合は「False」を設定する。

※この再現版では提出は行いません(送信先は未接続です)

Well done!

次のステップに進みましょう!

次のステップに進む

← 前のステップにもどる