【Python入門・応用】11.条件分岐|条件に応じて処理を分ける「条件分岐」をマスター!if文やmatch文について説明(初心者にもわかりやすく解説)

こんにちは。キノコードです。
この動画では、Pythonの条件分岐について説明します。
説明する内容はこちらです。

分岐処理とは?

「プログラムの3つの基本構造」のレッスンで説明しましたが、プログラムの基本的な動きは「順次進行」「条件分岐」「繰り返し」の3つです。
この動画では、「条件分岐」について説明します。
条件分岐とは、条件に合致する場合は「処理A」、合致しない場合は「処理B」というように、条件に応じて処理を切り替えることです。

if文

条件分岐の代表例が、if文です。
Pythonでの決まりを見てみましょう
"if 条件:
 条件を満たしたときの処理"
ifに続けて、「条件」を書きます。
コロンの次の行に「条件を満たしたときの処理」を書き、最後にコロンを書きます。この行は、インデントをひとつ右にずらして書きます。
ここからは実際にコードを書きながら解説を進めます。最初にどのようなコードを書くか説明します。
ageという変数の値が20以上なら大人という意味のadultを表示させて、20未満なら子供という意味のchildを表示させるという処理を書きます。
まずは、ageという変数の値が20以上ならadultを表示させる処理を書いてみましょう。

age = 22

if age >= 20:
    print('adult')

年齢という意味のageという変数に「22」という数値を代入しました。
if文の条件にageが20以上と記述します。
22は、20以上です。条件を満たすので、「adult」が表示されるはずです。
実行してみましょう。adultが表示されました。

age = 18

if age >= 20:
    print('adult')

次に、ageという変数に「18」を代入してみましょう。
これは条件を満たしません。実行してみましょう。
何も表示されませんでした。

if ~ else文

次にif ~ else文について説明します。
先ほど見たように、ただのif文は、条件を満たさないときは、処理されずにプログラムが終わります。
一方、if ~ else文は、条件を満たさないときの処理を記述することで実行することができます。
if ~ else文のPythonの決まりを見てみましょう。
先ほどのif文のあとに、else、コロンと書きます。
elseの次の行もインデントを下げましょう。そのあとに条件を満たさないときの処理を書きます。
コードを書いてみましょう。

age = 18

if age >= 20:
    print('adult')
else:
    print('child')

ageに代入する数値を18とします。if文の条件は先ほどと同じように、20以上とします。
else以降に子供という意味の「child」を表示させる処理を書きます。
18は、20以上の条件を満たさないので、「child」が表示されるはずです。
実行してみましょう。
else以下の処理が実行されて「child」が表示されました。

age = 22

if age >= 20:
    print('adult')
else:
    print('child')

ageに「22」を代入して実行してみましょう。
今度は条件を満たすので「adult」が表示されました。

if ~ elif ~ else文

もう一つの条件を加えたい場合に使うのが、elifです。
Pythonの決まりを見てみましょう。
先ほどの条件Aのif文の後に、elifと書いて2つ目の条件Bを書きます。
次の行に、「条件Bを満たしたときの処理」を書きます。この行も、インデントをひとつ右にずらして書きます。
それでは、コードを書いてみましょう。

age = 0

if age >= 20:
    print('adult')
elif age == 0:
    print('baby')
else:
    print('child')

20以上なら「adult」、0なら「baby」、それ以外のときは「child」と記述をします。
elifのところに、ageが0だった場合の処理を記述します。
ageの変数に「0」を代入します。
ageは0なので、babyが表示されるはずです。
実行します。babyと表示されました。

複数の演算子を使った条件設定

次に、複数の演算子を使って条件を設定してみましょう。
演算子のレッスンで説明した、+(プラス)、-(マイナス)などの算術演算子や、and、orなどの論理演算子を組み合わせて使用することで、様々な条件を設定できます。

number = 24

if number % 2 == 0 and number % 3 == 0:
    print("6の倍数です")
elif number % 2 == 0 and number % 3 != 0:
    print("2の倍数です")
elif number % 2 != 0 and number % 3 == 0:
    print("3の倍数です")
else:
    print("2と3の倍数ではありません")

どのようなコードを書くか説明します。
数値が2でも3でも割り切れる場合は「6の倍数です」、2で割り切れて3で割り切れない場合は「2の倍数です」、3で割り切れて2で割り切れない場合は「3の倍数です」、それ以外の場合は「2と3の倍数ではありません」と表示してみましょう。
まず、変数numberに数値を代入します。
そして、if文を書きます。
ifの後ろに1つ目の条件として、numberを2で割った余りが0、かつ3で割った余りが0と書きます。
インデントを下げて、条件を満たす場合に、「6の倍数です」と表示させる処理を書きます。
続いて、elifの後ろに、2つ目の条件として、numberを2で割った余りが0、かつ3で割った余りが0ではないと書きます。
この条件を満たす場合に、「2の倍数です」と表示させる処理を書きます。
続けて、2つ目のelifの後ろに、3つ目の条件として、numberを2で割った余りが0ではない、かつ3で割った余りが0と書きます。
この条件を満たす場合に、「3の倍数です」と表示させる処理を書きます。
最後に、elseと記述し、これら全ての条件を満たさない場合に、「2と3の倍数ではありません」と表示させる処理を書きます。
それでは、変数numberに24を代入し、結果を確認してみましょう。
実行します。
24は2で割った余りが0、かつ3で割った余りも0なので、「6の倍数です」と表示されました。

なお、演算子には優先順位があリます。
まず、算術演算子の%(パーセント)が実行されます。
次に、関係演算子の==(イコール2つ)が実行されます。
最後に、論理演算子のandが実行されます。
複数の演算子を使うときは注意しましょう。

number = 24

if number % 2 == 0 and\
    number % 3 == 0:
    print("6の倍数です")

elif (number % 2 == 0 and
      number % 3 != 0):
    print("2の倍数です")

elif (number % 2 != 0 and
      number % 3 == 0):
    print("3の倍数です")

else:
    print("2と3の倍数ではありません")

また、条件が長いときは、条件の式を改行した方がコードが読みやすくなります。
バックスラッシュや括弧を使用すると条件の式を改行できます。
バックスラッシュを使う場合は、改行したい位置にバックスラッシュを書きます。
この時、バックスラッシュの後ろに半角スペースは入れないようにします。
括弧を使う場合は、条件全体を括弧で囲みます。
こうすることで、括弧内の任意の場所で改行できます。
先ほどのコードをバックスラッシュや括弧を使って改行し、プログラムが動くか確認してみましょう。
実行します。
先ほどと同じ結果が表示されました。
エラーなくプログラムが動いていることがわかります。

match文

次にmatch文について説明します。
match文は2021年10月にリリースされた、Python3.10から導入された文法です。
3.10より前のバージョンでは対応していないので注意しましょう。
match文はif文と同様に条件分岐を行います。

fruit = "orange"

if fruit == "apple":
    print("りんご")
elif fruit == "orange":
    print("みかん")
elif fruit == "grape":
    print("ぶどう")
elif fruit == "peach":
    print("もも")
else:
    print("その他の果物")

では、変数fruitに果物の英語名を代入し、その英語名を日本語に変換して表示するコードを書いてみましょう。
変数がappleならりんご、orangeならみかん、grapeならぶどう、peachならもも、それら以外ならその他の果物と表示します。
if文を使って書くと、このようになります。
結果を表示してみましょう。
実行します。
結果が表示されました。
このようにif文を使用しても問題なくプログラムは動きますが、変数fruitと==(イコール2つ)を何度も記述しており、コードが少し冗長になります。

そこで、match文を使うと、この条件分岐を簡潔に書くことができます。
先ほどの条件分岐をmatch文で記述してみましょう。

fruit = "orange"

match fruit:
    case "apple":
        print("りんご")
    case "orange":
        print("みかん")
    case "grape":
        print("ぶどう")
    case "peach":
        print("もも")
    case _:
        print("その他の果物")

まず、matchと書き、その後ろに条件を判定する変数名、そして:(コロン)を書きます。
インデントを下げて、次の行から判定条件を書きます。
caseと書き、その後に判定条件、そして:(コロン)を書きます。
これが、if文におけるifやelifと同じ働きをします。
このとき、変数fruitと==(イコール2つ)が省略されていると考えましょう。
そして、インデントを下げて、表示したい結果を書きます。
他の分岐条件についても、同様に書きます。
最後に、caseの後に半角スペースを入れて_(アンダースコア)、そして:(コロン)を書き、次の行に表示したい結果を書きます。
どの条件にも当てはまらなかった場合、ここに書かれた内容が実行されます。
これが、if文におけるelseと同じ働きをします。

これで完成です。
結果を表示してみましょう。
実行します。
if文で記述した時と同じ結果が表示されました。
このように、分岐条件が多い場合はmatch文の方がコードを簡潔に書けることがあります。

pass

if文でさまざまな条件に応じた処理ができることがわかりました。
ここで、passについて説明します。
passは、なにもしないという処理を明示するものです。
コードを見てみましょう。

age = 18

if age >= 20:
    print('adult')
else:
    pass

はじめに書いたコードにelseを追加し、passと記述します。
これは、20以上なら「adult」と表示、それ以外ならなにもしないというコードです。
変数ageに18を代入して実行します。
なにも表示されませんでした。
else以下を記述をしなくても結果は同じですが、明記することでコードの可読性が上がります。

三項演算子(条件式)

最後に、三項演算子について説明します。
三項演算子は条件式とも呼ばれます。
三項演算子とは、条件分岐を改行せずに1行で書く方法です。
通常の書き方で書く方法と、三項演算子を用いて書く方法を比較してみましょう。

age = 18

if age >= 20:
    print("adult")
else:
    print("child")

まず、if文の説明で用いた例を、通常の書き方で書きます。
変数ageに年齢を代入します。
そして、if文を用いて、ageが20以上ならadult、20未満ならchildと表示するように書きます。
実行します。
結果が表示されました。

次に、この条件分岐を三項演算子を用いて書いてみましょう。

age = 18

print("adult" if age >= 20 else "child")

最初に、条件を満たす場合の結果を書きます。
その後にif、そして条件を書きます。
続けてelse、そして条件を満たさない場合の結果を書きます。
これで完成です。

全体をprint関数で囲み、結果を表示してみましょう。
実行します。
通常の書き方で記述した場合と同じ結果が表示されました。
このように、条件式を使うと条件分岐を1行で簡潔に書けます。
ただし、表示したい結果が長いときなど、逆にコードが読みにくくなる場合もあるので注意しましょう。