Python: 論理演算子と条件分岐

論理演算子と条件分岐 Python

データ型については別の記事で説明しました。その記事では紹介していないデータ型がPythonにはいくつかありますが、その一つがboolean型です。
boolean型の値は二つしかありません。TrueFalseです。

boolean型を利用することでプログラマーは条件に応じて別の処理をさせるコードを書くことができます。

論理演算子

論理演算子とは値同士を比較するために利用する記号のことです。
論理演算子を利用している比較は全てブール式とよばれ、その結果は全てboolean型の値で表されます。
論理演算子は算術演算子に似ていますが、結果が数字ではなくboolean型の値であるという点で異なります。

記号意味
<より小さい
>より大きい
==等しい
!=等しくない

論理演算子は上表の4つです。それぞれの使用例を紹介します。

<(より小さい)

シェルで 3 < 5などと打ち込んで実行してみてください。
Trueというboolean値が返ってくるはずです。左辺(3)が右辺(5)より小さい場合はTrue、そうでない場合はFalseが返ってきます。この場合は3は5より小さいのでTrueが返ってきています。

>(より大きい)はこれと反対というだけなので説明は省略します。

==(等しい)

説明するまでもないとは思いますが、右辺と左辺の値が等しい場合にTrue、そうでない場合にFalseが返ってきます。3と9は当然等しくないので、上の画像ではFalseが返ってきています。

=と==
Pythonでは=を使っている記号は=と==の二つがありますが、これらは全く別の意味をもつ記号なので、この二つをきちんと区別することは非常に重要です。
一つだけの”=”は変数に値が代入されるときに使用される記号です。
このセクションで説明した二つの”==”は二つの値が等しいかを判別するための論理演算子です。
数学で使う=とプログラミングの世界での=は別物なので注意しましょう。

!=(等しくない)

論理演算子は変数とともに利用することもできます。実際のプログラムの多くの場合は変数を比較するときに論理演算子を利用しています。なぜなら値が最初から決まっているならわざわざ分岐を考える必要がないからです。

この例ではorangesとapplesという名前の変数にそれぞれ5と7を入れて比較しています。それらが等しくなければTrue、等しければFalseを返します。==の反対と覚えておきましょう。

実際のプログラム中では、ある値のときのみ例外的に特定の処理をさせたい(またはさせたくない)場合によく使われます。

ブール演算子

ブール式はブール演算子と共に使われることがあります。
ブール演算子とは”and”、”or”、”not”の三つのことです。またブール演算子は上述した論理演算子とまとめて論理演算子と呼ばれることもあります。

ブール演算子を用いると、いくつかの異なる変数を用いた複雑なコードを書くことができるようになります。

上画像の例を見てみましょう。
andを用いた文ではandの両側にあるブール式、つまりoranges < 10とapples > 2が両方ともTrueの場合にのみTrueが返されます。今回は両方ともTrueなので、Trueが返されています。

orを用いた文ではorの両側にあるブール式のどちらか一方でもTrueの場合にTrueを返します。今回の例ではoranges < 10はTrue、apples == 3はFalseなので、最終的にTrueを返しています。

notはブール式の前に記述することができます。notの後のブール式の結果の値がTrueである場合、Falseが返されます。逆にnotの後のブール式の値がFalseの場合にTrueが返されます。

条件分岐

プログラムは特定の状況でのみ動作させたいコードを含む場合が多いです。それを実現するためにはプログラマーは条件分岐文を書く必要があります。
プログラムがどの分岐を選択するかはブール式の結果によります。
ブール式によってプログラムに行わせる処理を異なる入力や環境に対して適応させることができるのです。

条件が一つだけの条件分岐

最も簡単な条件分岐はブール式がTrueの場合のみ、特定の処理を行わせるという、分岐が一つだけの条件分岐文です。これはif文と呼ばれます。

上の例でif文のブール式はtemperature > 25の部分です。
temperatureという変数には27という値が事前に代入されているので、このブール式はTrueを返します。

if文ではこれがTrueの場合、”Switch off heating”という文言を出力するように書かれているので、出力結果にはちゃんとSwitch off heatingが表示されています。

条件が二つの条件分岐

ブール式がTrueの場合にはある処理をさせ、Falseの場合にはまた別の処理をさせたいという場合には二つの条件分岐が必要です。これはif-else文を使うことで実現できます。

この例では、はじめにif文でageの値が19より大きい場合は”You can drink”を出力させるように指示しています。
その後のelse文には、もしif文の中身が実行されなかった場合(ageが19以下だった場合)に実行させたい処理を記述しています。

今回ageは17ですので、if文は実行されず、代わりにelse文が実行され、最後に”You can not drink”という文言が出力されています。

条件が三つ以上の条件分岐

起こり得る状況が3つ以上ある場合にはelifコマンド(else-ifの略)を使用します。elifコマンドはif文とelse文の間で何回でも使うことができるので、理論上は無限に分岐を増やすことができます。

基本はif文と同じです。if文が実行されなかった場合に、elif文で次の条件を指定して特定の処理を行わせることができます。今回はelifコマンドは一つしか使っていませんが、2個でも3個でも使用することができます。
if文にもelif文にも一致しなかった場合に、最後のelse文の処理が実行されます。

今回はquiz_scoreは9で最初のif文に適合しているので、その後のelif文の処理は行われていません。

いかかでしたか?条件分岐自体は難しいものではありませんね。条件分岐を利用することで複雑なプログラムをつくることができるようになります。また条件分岐はプログラミングの醍醐味でもあるので、論理演算子と共に基礎は覚えておきましょう。

コメント

プロフィール

プロフィール
コードラボJP

大学卒業後SEに就職、現在は退職しフリーランスとして活動中。
『初心者でも挫折せずに一人でプログラミングを学べる』をモットーに、コードラボJPを開設
お問い合わせ等はcodelabsjp@gmail.comまで

コードラボJPをフォローする
タイトルとURLをコピーしました