この記事には、PR部分にUdemyのアフィリエイトリンクを含みますが、記事の内容は筆者が独自に作成したものです。記事の作成についてUdemy様から報酬等を受け取って作成したものではありません。
イントロダクション
今回は、Pythonの「分岐処理」について学びます。
Pythonに限らず、コンピュータが行う全ての処理は、3つの要素に分類できます。
その3つとは、順次処理・分岐処理・反復処理です。
そして、コンピューターに3つのうちどの処理を行わせるかを指示する文を制御構文(ステートメント)と呼びます。
今までの記事で出てきたコードのほとんどは、処理を書いた順番に実行する順次処理で書かれています。特に何も指示しなければ、コンピューターは単純に順番通りに処理を行うためです。
PR
分岐処理
分岐とは、条件の結果に応じて、処理の方法を変えることです。
Pythonでは、条件を満たしているかどうかの判断に、条件式が使われます。
そして「条件を満たしているかどうか」という問いには、TrueかFalseか、すなわち真か偽かという答えが用いられます。
Trueならば、Aの処理をする、FalseならばBの処理をするという指示を出すことが、分岐処理であるといえます。
条件式とは?
前回のクラスの紹介・ブール型のコード例で既に扱っていますが、復習のためにもう一度おさらいしておきましょう。
前回の記事はこちら
条件式は、ある条件が真(True)か偽(False)かを評価する式です。
#%%
X = 10
print(X > 5) # True
print(X < 5) # False
print(X == 10) # True
print(X == 5) # False
これらの条件式はそれぞれ真(True)と偽(False)を返します。
分岐処理の書き方
基本①(TrueとFalseのみ)
Pythonでは、「 if 」、「 else 」を使って分岐を表現します。
#%%
X = 10
if X > 5:
print("Xは5より大きいです")
else:
print("Xは5以下です")
基本②(Falseに条件を追加)
elifを使って、Falseの場合の条件を足すことが出来ます。上記コード例の場合、 x>5, x=5, x<5 の三つの場合分けをすることもできます。
#%%
X = 10
if X > 5:
print("Xは5より大きいです")
elif X < 5:
print("Xは5より小さいです")
else:
print("Xは5です")
# こうも書ける
X = 10
if X > 5:
print("Xは5より大きいです")
elif X == 5:
print("Xは5です")
else:
print("Xは5より小さいです")
発展(Trueに条件を追加・入れ子構造・ネスト)
ifを2回以上使うことで、Trueの場合の条件を足すことが出来ます。
これを入れ子構造(ネスト)と呼びます。
入れ子構造により、2つの条件を両方満たした場合の処理を書くことができます。
条件1でFalseとなった場合の処理と、条件2でFalseとなった場合の処理は共通でもかまいませんが、下記コード例では分けています。
Falseの場合の条件を付け足す「 elif 」との違いに着目してください。
#%%
X = input("0から100までの数字を入力してください。")
Y = 79
Z = int(X)
if Z > Y:
if Z == 100:
print("百点満点!")
elif Z > 100:
print("0から100までの数字ではない値が入力されました。")
else:
print("合格")
else:
print("不合格")
論理演算子(and or not)
さて、入れ子構造(ネスト)によって、True条件の分岐を記述できることがわかりましたが、似た機能として、and or not という論理演算子もあります。
よりスマートに複数の条件を分岐処理に課すことが出来ますが、それぞれの条件によって、きめ細かく処理を分ける場合は、入れ子構造(ネスト)の方が書きやすいかと思います。
and
andは、andで繋がれた両方の条件が満たされた場合にTrueを返します。
#%%
AGE = input("貴方の年齢を記入してください")
TEST = input("テストの点数を記入してください")
AGE_INT = int(AGE)
TEST_INT = int(TEST)
if AGE_INT >= 18 and TEST_INT >= 80:
print("合格")
else:
print("不合格")
or
orは、orで繋がれた条件の一方または両方が満たされた場合にTrueを返します。
#%%
AGE = input("貴方の年齢を記入してください")
TEST = input("テストの点数を記入してください")
AGE_INT = int(AGE)
TEST_INT = int(TEST)
if AGE_INT < 18 or TEST_INT < 80:
print("不合格")
else:
print("合格")
not
not に続いて書かれた条件がTrueならばFalseを、FalseならばTrueを返します。
#%%
AGE = input("貴方の年齢を記入してください")
AGE_INT = int(AGE)
TEST = input("テストの点数を記入してください")
TEST_INT = int(TEST)
if not AGE_INT < 18 and not TEST_INT < 80:
print("合格")
else:
print("不合格")
例外処理
条件分岐を含んだプログラムを書いていると、ときおり条件文のTrueにもFalseにも当てはまらないエラー文が出力されることがあります。
分岐処理・発展のコード例で input(“0から100までの数字を入力してください。”) に、アルファベットや日本語、マイナスの値などを入れてみてください。ValueErrorが発生するはずです。
「 try: except 」文を使い、これらエラーへの対処をあらかじめ設定しておくことで、プログラムを止めずに実行させることが出来るようになります。
よく見るエラーとしては、
- SyntaxError
- ValueError
- ZeroDivisionError: division by zero
- NameError
などが挙げられます。
#%%
try:
X = input("0から100までの数字を入力してください。")
Y = 79
Z = int(X)
if Z > Y:
if Z == 100:
print("百点満点!")
elif Z > 100:
print("0から100までの数字ではない値が入力されました。")
else:
print("合格")
else:
print("不合格")
except ValueError:
print("0から100までの数字ではない値が入力されました。")
気が付かれた方もいらっしゃるかもしれませんが、「 if else 」文も、「 try except 」文も、条件分岐に変わりはなく、機能もほとんど変わりません。
しかし、一般的には、「 try except 」文は、エラー処理のみに使われるべきであり、条件分岐のために使うべきではないといわれます。
誰が読んでもわかりやすいコードを書くために、「 try except」文を使うべきか、「 if else 」文を使うべきかを考えてコーディングを行いましょう。
まとめ
お疲れさまでした!
分岐処理(例外処理)について、できるだけ単純な例を挙げて説明しました。
「 if 」、「 elif 」、「else」で、Trueの場合の条件を増やしたり、Falseの場合の条件を増やすことができます。これらを組み合わせるだけでも、複雑なフローチャートのプログラムを書くことができます。
ただ、他人が読んでもわかりやすいコードを書くには、分岐処理でどれだけコードを単純化できるかが肝になります。コードが読みやすいといわれるプログラマーを目指しましょう!
そしてコード例は、ぜひコピーペーストではなく、ご自分で書いてみてください。Vscodeで実際に書き、アレンジすることでより理解が深まります。
次回は、反復処理について学習します。
PR
コメント