MQL5システムトレーダーの為のPython講座:第11回「条件分岐について」

Python
スポンサーリンク
スポンサーリンク

はじめに

前回演算子について学びました

第11回の今回はPython条件分岐について解説します。

条件分岐とは?

条件分岐はプログラムの動きを条件に応じて変えるための基本的な機能です。プログラムの処理は通常、上から順番に実行されますが、条件分岐を使うことで、特定の条件を満たしたときのみ特別な処理を実行させることができます。

たとえば、ある値が一定以上の場合にはAの処理を、それ以外の場合にはBの処理を行うといったことが可能になります。このように、条件に応じて動作を変えることができるため、プログラムの柔軟性が大きく向上します。

基本的な条件分岐:if文

if文の書き方

Pythonif文は、条件に応じて異なる処理を実行させるための構文です。以下が基本的な構文です。

if 条件:
    条件が真(True)の場合に実行する処理

条件が成り立つ場合、その後に続く処理が実行されます。Pythonではインデント(スペースやタブでの字下げ)が非常に重要で、条件が成立した場合の処理をインデントして書く必要があります。

具体例

以下は、年齢に基づいて「大人」または「子供」を表示する例です。

# 年齢を表す変数を定義します
age = 18  # ここでは18歳を代入しています

# if文を使って条件を判定します
if age >= 20:
    # ageが20以上の場合、「大人」と表示します
    print("大人")
else:
    # それ以外の場合、「子供」と表示します
    print("子供")

上記のコードでは、まず変数ageに18を代入しています。その後、if文でageが20以上であるかを判定しています。この場合、ageは18なので条件は成り立たず、elseの処理が実行されて「子供」と表示されます。

もう一度変数ageを変更して確認してみましょう。

# 年齢を表す変数を定義します
age = 22  # ここでは22歳を代入しています

# if文を使って条件を判定します
if age >= 20:
    # ageが20以上の場合、「大人」と表示します
    print("大人")
else:
    # それ以外の場合、「子供」と表示します
    print("子供")

この場合、ageが22なので条件が成り立ち、「大人」と表示されます。

このように、if文を使うことで、条件に応じた異なる処理を行うことができます。

条件が満たされない場合の処理:if-else文

if-else文の書き方

if文は特定の条件を満たす場合にのみ処理を実行しますが、条件が満たされない場合に別の処理を行いたいこともよくあります。このときに使うのがif-else文です。if-else文を使うと、条件を満たさないときに実行される処理を明示的に指定することができます。

基本的な構文は次の通りです。

if 条件:
    条件が真(True)の場合に実行する処理
else:
    条件が偽(False)の場合に実行する処理

具体例

以下は、年齢に基づいて「大人」または「子供」を表示する例です。if-else文を使用して、条件を満たさない場合の処理を追加しています。

# 年齢を表す変数を定義します
age = 18  # ここでは18歳を代入しています

# if-else文を使って条件を判定します
if age >= 20:
    # ageが20以上の場合、「大人」と表示します
    print("大人")
else:
    # ageが20未満の場合、「子供」と表示します
    print("子供")

この例では、変数ageに18を代入しています。if文でageが20以上であるかを判定していますが、この場合は条件を満たさないためelseの処理が実行され、「子供」と表示されます。

次に、変数ageを変更して確認してみましょう。

# 年齢を表す変数を定義します
age = 22  # ここでは22歳を代入しています

# if-else文を使って条件を判定します
if age >= 20:
    # ageが20以上の場合、「大人」と表示します
    print("大人")
else:
    # ageが20未満の場合、「子供」と表示します
    print("子供")

この場合はageが22なので条件が満たされ、「大人」と表示されます。

if-else文を使うことで、条件に応じて異なる処理を行うことが可能になり、プログラムの動作を柔軟に設計できます。

複数の条件を扱う:if-elif-else文

if-elif-else文の使い方

複数の条件を評価したい場合には、if文に加えてelifelse ifの略)を使用します。elifを使うと、複数の条件を順番に判定し、最初に満たされた条件の処理が実行されます。また、どの条件にも当てはまらなかった場合にはelseを使って最後の処理を定義することができます。

基本的な構文は次の通りです。

if 条件A:
    条件Aが真(True)の場合に実行する処理
elif 条件B:
    条件Bが真(True)の場合に実行する処理
else:
    上記のすべての条件が偽(False)の場合に実行する処理

具体例

以下の例では、年齢に応じて「大人」「子供」「ベイビー」と表示する処理を実装します。

# 年齢を表す変数を定義します
age = 0  # ここでは0歳を代入しています

# if-elif-else文を使って条件を判定します
if age >= 20:
    # ageが20以上の場合、「大人」と表示します
    print("大人")
elif age == 0:
    # ageが0の場合、「ベイビー」と表示します
    print("ベイビー")
else:
    # 上記の条件を満たさない場合、「子供」と表示します
    print("子供")

この例では、まず変数ageに0を代入しています。最初の条件である「20以上」は満たされないので、次にelifの条件が評価されます。この場合、ageが0なので「ベイビー」と表示されます。

もう一度変数ageを変更して確認してみましょう。

# 年齢を表す変数を定義します
age = 15  # ここでは15歳を代入しています

# if-elif-else文を使って条件を判定します
if age >= 20:
    # ageが20以上の場合、「大人」と表示します
    print("大人")
elif age == 0:
    # ageが0の場合、「ベイビー」と表示します
    print("ベイビー")
else:
    # 上記の条件を満たさない場合、「子供」と表示します
    print("子供")

この場合、ageは15なので「20以上」でも「0」でもなく、elseの処理が実行されて「子供」と表示されます。

このように、複数の条件を順番に評価したいときにif-elif-else文を使用すると、コードの可読性が上がり、処理をわかりやすく書くことができます。

複数の条件を組み合わせる:複数の演算子を使った条件分岐

演算子の組み合わせ

条件分岐では、複数の条件を組み合わせて判定することがよくあります。Pythonでは論理演算子「and」や「or」を使用して複数の条件を組み合わせ、より複雑な条件を設定できます。「and」はすべての条件が真(True)の場合に成立し、「or」はどれか一つの条件が真(True)であれば成立します。

具体例

次の例では、数値が「2でも3でも割り切れる場合」「2でのみ割り切れる場合」「3でのみ割り切れる場合」、および「どれにも当てはまらない場合」のそれぞれで異なるメッセージを表示します。

# 数値を表す変数を定義します
number = 24  # ここでは24を代入しています

# if-elif-else文を使って条件を判定します
if number % 2 == 0 and number % 3 == 0:
    # numberが2で割り切れて、かつ3でも割り切れる場合、「6の倍数です」と表示します
    print("6の倍数です")
elif number % 2 == 0 and number % 3 != 0:
    # numberが2で割り切れて、3では割り切れない場合、「2の倍数です」と表示します
    print("2の倍数です")
elif number % 2 != 0 and number % 3 == 0:
    # numberが3で割り切れて、2では割り切れない場合、「3の倍数です」と表示します
    print("3の倍数です")
else:
    # 上記のいずれの条件も満たさない場合、「2と3の倍数ではありません」と表示します
    print("2と3の倍数ではありません")

この例では、まず変数numberに24を代入しています。if文では、まず「numberが2で割り切れる、かつ3で割り切れる」という条件を判定します。この場合、numberは24なのでこの条件を満たし、「6の倍数です」と表示されます。

変数numberを変更してみましょう。

# 数値を表す変数を定義します
number = 10  # ここでは10を代入しています

# if-elif-else文を使って条件を判定します
if number % 2 == 0 and number % 3 == 0:
    # numberが2で割り切れて、かつ3でも割り切れる場合、「6の倍数です」と表示します
    print("6の倍数です")
elif number % 2 == 0 and number % 3 != 0:
    # numberが2で割り切れて、3では割り切れない場合、「2の倍数です」と表示します
    print("2の倍数です")
elif number % 2 != 0 and number % 3 == 0:
    # numberが3で割り切れて、2では割り切れない場合、「3の倍数です」と表示します
    print("3の倍数です")
else:
    # 上記のいずれの条件も満たさない場合、「2と3の倍数ではありません」と表示します
    print("2と3の倍数ではありません")

この場合、numberは10なので「2で割り切れるが3では割り切れない」条件が成立し、「2の倍数です」と表示されます。

注意点

複数の条件を組み合わせるとき、演算子の優先順位に注意が必要です。まず算術演算子が実行され、その後に関係演算子が評価され、最後に論理演算子が評価されます。

# 変数を定義します
a = 6  # ここでは6を代入しています
b = 3  # ここでは3を代入しています
c = 2  # ここでは2を代入しています

# 複数の演算子を使った条件を判定します
if (a % b == 0) and (a % c == 0):
    # 変数aが変数bで割り切れて、かつ変数cでも割り切れる場合、「aはbおよびcの倍数です」と表示します
    print("aはbおよびcの倍数です")
else:
    # 上記の条件が満たされない場合、「aはbまたはcの倍数ではありません」と表示します
    print("aはbまたはcの倍数ではありません")

上記のサンプルコードでは、変数a、b、cにそれぞれ6、3、2を代入しています。次に、if文で複数の演算子を使用して条件を判定しています。

まず「a % b」および「a % c」が実行されます。これは、aをbおよびcで割った余りを計算する算術演算子の部分です。この結果、aはb(3)およびc(2)の両方で割り切れるので、最初の関係演算子「== 0」が評価され、Trueになります。

次に論理演算子「and」が評価されます。「and」は両方の条件がTrueの場合にTrueを返すため、この場合はifの条件が成立し、「aはbおよびcの倍数です」と表示されます。

このコードは、演算子の優先順位による評価順序を示しており、まず算術演算子が実行され、その後に関係演算子が評価され、最後に論理演算子が評価されることを確認できます。

この順序を理解していないと、期待していない結果になることがあるため、必要に応じてカッコを使って明確にすることが重要です。

# 数値を表す変数を定義します
number = 15  # ここでは15を代入しています

# if-elif-else文を使って条件を判定します
if (number % 2 == 0) and (number % 3 == 0):
    # numberが2で割り切れて、かつ3でも割り切れる場合、「6の倍数です」と表示します
    print("6の倍数です")
elif (number % 2 == 0) and (number % 3 != 0):
    # numberが2で割り切れて、3では割り切れない場合、「2の倍数です」と表示します
    print("2の倍数です")
elif (number % 2 != 0) and (number % 3 == 0):
    # numberが3で割り切れて、2では割り切れない場合、「3の倍数です」と表示します
    print("3の倍数です")
else:
    # 上記のいずれの条件も満たさない場合、「2と3の倍数ではありません」と表示します
    print("2と3の倍数ではありません")

このコードでは、カッコを使って条件の評価順序を明確にし、誤解を防ぐようにしています。また、各条件ごとに改行を用いることで、どの条件を判定しているのかが一目でわかるようにしており、コードの可読性が向上しています。

バックスラッシュを使って改行する場合、次のように書くことも可能です。

# 数値を表す変数を定義します
number = 15  # ここでは15を代入しています

# if-elif-else文を使って条件を判定します
if number % 2 == 0 and \
   number % 3 == 0:
    # numberが2で割り切れて、かつ3でも割り切れる場合、「6の倍数です」と表示します
    print("6の倍数です")
elif number % 2 == 0 and \
     number % 3 != 0:
    # numberが2で割り切れて、3では割り切れない場合、「2の倍数です」と表示します
    print("2の倍数です")
elif number % 2 != 0 and \
     number % 3 == 0:
    # numberが3で割り切れて、2では割り切れない場合、「3の倍数です」と表示します
    print("3の倍数です")
else:
    # 上記のいずれの条件も満たさない場合、「2と3の倍数ではありません」と表示します
    print("2と3の倍数ではありません")

このように、バックスラッシュを使って条件を改行することで、1行が長くなりすぎるのを防ぎ、コードを見やすくすることができます。

条件分岐を簡潔に書く:match文の使い方

match文とは?

match文Python3.10で導入された新しい条件分岐の文法です。if文と同じように条件に応じて異なる処理を行いますが、複数の条件を扱う際にif文よりもコードを簡潔に書けるのが特徴です。特に、変数の値に基づいて複数の選択肢から1つを選ぶ場合に有効です。

基本的な構文は次の通りです。

match 変数:
    case 条件1:
        条件1に一致する場合の処理
    case 条件2:
        条件2に一致する場合の処理
    case _:
        どの条件にも一致しない場合の処理

caseに記述する条件に一致した場合、対応する処理が実行されます。case _ はどの条件にも一致しない場合のデフォルト処理を指定します。

具体例

以下の例では、果物の名前を英語から日本語に変換して表示する処理を、if文match文の両方で実装して、その違いを見ていきます。

if文を使った場合

# 果物の英語名を変数に代入します
fruit = "apple"

# if文を使って条件を判定します
if fruit == "apple":
    # 変数fruitが"apple"の場合、「リンゴ」と表示します
    print("リンゴ")
elif fruit == "orange":
    # 変数fruitが"orange"の場合、「みかん」と表示します
    print("みかん")
elif fruit == "grape":
    # 変数fruitが"grape"の場合、「ブドウ」と表示します
    print("ブドウ")
elif fruit == "peach":
    # 変数fruitが"peach"の場合、「モモ」と表示します
    print("モモ")
else:
    # どの条件にも当てはまらない場合、「その他の果物」と表示します
    print("その他の果物")

このコードでは、変数fruitの値を順番に判定し、該当するものを表示しています。しかし、if文のたびに同じ変数名と条件を書かなければならないため、コードが冗長になります。

match文を使った場合

# 果物の英語名を変数に代入します
fruit = "apple"

# match文を使って条件を判定します
match fruit:
    case "apple":
        # 変数fruitが"apple"の場合、「リンゴ」と表示します
        print("リンゴ")
    case "orange":
        # 変数fruitが"orange"の場合、「みかん」と表示します
        print("みかん")
    case "grape":
        # 変数fruitが"grape"の場合、「ブドウ」と表示します
        print("ブドウ")
    case "peach":
        # 変数fruitが"peach"の場合、「モモ」と表示します
        print("モモ")
    case _:
        # どの条件にも当てはまらない場合、「その他の果物」と表示します
        print("その他の果物")

このコードでは、match文を使って同じ処理をより簡潔に書いています。case文の後には比較対象の値のみを書くため、冗長なコードを減らすことができ、全体がすっきりと見やすくなっています。

match文を使用することで、複数の条件を一つの変数で判定する場合、より簡潔でわかりやすいコードを書くことが可能になります。

処理を明示的に行わない:pass文の使用

pass文の用途

プログラムを書いていると、「特定の条件に当てはまる場合、何も処理を行わない」といった場面が出てくることがあります。このときに使えるのがpass文です。pass文は、何もしないことを明示的に示すための文法です。実行しても何の処理も行わないため、条件に応じた動作が必要ない場合に使います。

基本的な構文は次の通りです。

if 条件:
    条件が真(True)の場合に実行する処理
else:
    pass  # 条件が偽(False)の場合は何もしない

具体例

次の例では、年齢に基づいて「大人」と表示する処理を行いますが、20歳未満の場合は特に何もしないようにしています。

# 年齢を表す変数を定義します
age = 18  # ここでは18歳を代入しています

# if-else文を使って条件を判定します
if age >= 20:
    # ageが20以上の場合、「大人」と表示します
    print("大人")
else:
    # ageが20未満の場合は何もしません
    pass

このコードでは、変数ageに18を代入しています。if文でageが20以上であるかを判定していますが、今回の条件ではそれを満たさないためelseが実行されます。しかし、else部分にはpass文が書かれているため、何も処理が行われません。

pass文を使うことで、「特定の条件では何もしない」という動作を明示的に記述することができます。これにより、コードの可読性が向上し、意図的に何もしないことを示すことが可能になります。

次に、もう少し複雑な例を見てみましょう。

# 数値を表す変数を定義します
number = 10  # ここでは10を代入しています

# if-elif-else文を使って条件を判定します
if number % 2 == 0:
    # numberが2で割り切れる場合、「偶数」と表示します
    print("偶数")
elif number % 3 == 0:
    # numberが3で割り切れる場合、「3の倍数」と表示します
    print("3の倍数")
else:
    # どの条件にも当てはまらない場合は何もしません
    pass

この例では、変数numberが2で割り切れる場合は「偶数」と表示し、3で割り切れる場合は「3の倍数」と表示します。どの条件にも当てはまらない場合はpass文を使って何もしないことを明示的に記述しています。このようにpass文を使用することで、意図的に処理を省略したい場合に、コードが未完成であるわけではなく、何も行わないことが目的であることを明確に示せます。

条件分岐を1行で書く:三項演算子(条件式)

三項演算子とは?

三項演算子は、条件分岐を1行で書くための方法で、「条件式」とも呼ばれます。通常のif-else文を使って複数行で記述する代わりに、条件とそれに応じた処理を1行で表現することができます。これにより、シンプルな条件分岐をコンパクトに記述でき、コードがより簡潔になります。

基本的な構文は次の通りです。

処理A if 条件 else 処理B

この構文は、「条件が真の場合に処理Aを、そうでない場合に処理Bを行う」という意味になります。

具体例

以下の例では、年齢に基づいて「大人」または「子供」を表示する処理を、三項演算子を使って1行で書いています。

通常のif-else文を使った場合

# 年齢を表す変数を定義します
age = 18  # ここでは18歳を代入しています

# if-else文を使って条件を判定します
if age >= 20:
    # ageが20以上の場合、「大人」と表示します
    print("大人")
else:
    # ageが20未満の場合、「子供」と表示します
    print("子供")

この例では、if-else文を使って年齢に応じて「大人」または「子供」を表示しています。次に、これを三項演算子を用いて書き直してみます。

三項演算子を使った場合

# 年齢を表す変数を定義します
age = 18  # ここでは18歳を代入しています

# 三項演算子を使って条件を判定し、結果を表示します
print("大人") if age >= 20 else print("子供")

このコードでは、条件「ageが20以上」を満たす場合には「大人」を表示し、それ以外の場合には「子供」を表示します。三項演算子を使うことで、通常のif-else文と同じ動作を1行で記述することができ、コードが簡潔になっています。

注意点

三項演算子を使用する場合は、条件とそれに応じた処理が簡単であるときに適しています。条件が複雑だったり、処理が長くなる場合には、三項演算子を使うことで逆にコードの可読性が低下する可能性があるため、通常のif-else文を使った方が良い場合もあります。

たとえば、次のように条件が複雑な場合には、三項演算子を使うとコードが読みにくくなります。

# 複雑な条件を判定する例
age = 18
status = "大人" if (age >= 20 and age < 65) else "子供" if (age < 20) else "シニア"
print(status)

このコードでは条件が複数重なっているため、三項演算子の使い方としては可読性が下がります。このような場合には、通常のif-elif-else文を使用する方が望ましいです。シンプルな条件に対して使うことで、コードを短くし、見やすくすることができます。

まとめ

今回の記事では、Pythonにおける条件分岐のさまざまな方法について解説しました。条件分岐はプログラムの基本的な構造の一つで、条件に応じて異なる処理を実行させるために使用します。

まず、基本的な条件分岐であるif文の使い方について学びました。if文は、指定した条件が成り立つ場合に特定の処理を実行します。また、if-else文を使うことで、条件が成り立たない場合の処理を追加できることも確認しました。さらに、if-elif-else文を使うことで、複数の条件を順に評価する方法を紹介しました。

次に、複数の条件を組み合わせる方法について学びました。論理演算子「and」や「or」を使って条件を組み合わせることで、複雑な条件を扱うことが可能です。演算子の優先順位に注意しながら条件を設定することで、正しくプログラムを動作させることができます。

また、Python3.10で導入されたmatch文を使うことで、複数の条件を簡潔に表現する方法についても紹介しました。match文if文に比べてコードの見た目が整理されており、特に値に応じて異なる処理を行う場合に有効です。

さらに、pass文を使うことで、条件に応じて何も処理を行わないことを明示的に示す方法についても解説しました。pass文を使うことで、意図的に処理をスキップすることが可能であり、コードの意図を明確に示すことができます。

最後に、条件分岐を1行で書ける三項演算子(条件式)についても説明しました。三項演算子はシンプルな条件に対して使うことで、コードを短くすることができますが、複雑な条件を扱う場合には可読性が下がるため注意が必要です。

条件分岐の使い方を理解することで、より柔軟で効率的なプログラムを書けるようになります。今回紹介した各方法を状況に応じて適切に使い分けることで、プログラムの設計がより強化されます。

MQL5システムトレーダーの為のPython講座:第10回「演算子について」

       →MQL5システムトレーダーの為のPython講座:第12回「繰り返し処理について」

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