Pythonで遊ぼう! 基礎編 ⑦ 分岐処理 if,elif,else,try,except

基礎⑦アイキャッチ 基礎編
どっち?

この記事には、PR部分にUdemyのアフィリエイトリンクを含みますが、記事の内容は筆者が独自に作成したものです。記事の作成についてUdemy様から報酬等を受け取って作成したものではありません。

スポンサーリンク

イントロダクション

今回は、Pythonの「分岐処理」について学びます。

Pythonに限らず、コンピュータが行う全ての処理は、3つの要素に分類できます。

その3つとは、順次処理・分岐処理・反復処理です。

そして、コンピューターに3つのうちどの処理を行わせるかを指示する文を制御構文(ステートメント)と呼びます。

今までの記事で出てきたコードのほとんどは、処理を書いた順番に実行する順次処理で書かれています。特に何も指示しなければ、コンピューターは単純に順番通りに処理を行うためです。

順次

PR

プログラミング言語の人気オンラインコース
ITとソフトウェアの人気オンラインコース

分岐処理

分岐とは、条件の結果に応じて、処理の方法を変えることです。

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のみ)

基本1

Pythonでは、「 if 」、「 else 」を使って分岐を表現します。

if,elseの書き方
  • 「 if 」に続いて条件式を書き、「 : 」で閉じます。
  • 改行してインデント(半角スペース4つのこと、VSCodeではTABキーで入力)ののちにTrueの場合の処理を書きます。
  • インデントを取らずに「 else: 」を書きます。
  • 改行してインデントののち、Falseの場合の処理を書きます。
#%%
X = 10
if X > 5:
    print("Xは5より大きいです")
else:
    print("Xは5以下です")

基本②(Falseに条件を追加)

基本2

elifを使って、Falseの場合の条件を足すことが出来ます。上記コード例の場合、 x>5, x=5, x<5 の三つの場合分けをすることもできます。

elifの書き方
  • 「 elif 」を書く場所は、は、「 if 」と「 else 」の間です。
  • 「 elif 」に続いて条件式を書き、「 : 」で閉じます。
  • インデントののちに、Trueの場合の処理を書きます。
  • elifを複数追加しても構いません。
#%%
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 」との違いに着目してください。

入れ子構造(ネスト)の書き方
  • 「 if 」を使った後に「 if 」を使うことが出来る
  • 2回目の「 if 」は1回インデントを置いて書く。
  • 2回目の「 if 」のTrue処理は、2回インデントを置いて書く。
  • 2回目の「if」の「 else: 」は、1回インデントを置いて書く。
  • 2回目の「 else: 」の処理は、2回インデントを置いて書く。
  • 1回目の「 if 」を忘れずに「 else: 」で閉じる。
#%%
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,exceptの書き方
  • try:のあとに改行する
  • インデントを置いて、エラーが発生する可能性のある処理を書き始める
  • ifや、入れ子構造のifの場合に使うインデントに、さらにインデントを追加して書く。
  • exceptは、try:と同じようにインデントを置かずに書く
  • except エラー名: とエラー名を書く
  • 改行してインデントを置き、該当する場合の処理を書く
#%%
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

プログラミング言語の人気オンラインコース
ITとソフトウェアの人気オンラインコース

コメント

タイトルとURLをコピーしました