前回、前前回の記事でPythonでのif文(条件文)の書き方、if文の入れ子(ネスト)について、まとめました。今回はelif文について、まとめました。
これまでと同様、「明日の天候によって、行動を変える」という次のようなプログラムを作りたいと思います。
if文のネストの場合
プログラムの条件
明日(変数:tomorrow)が晴れなら買い物にいく、曇りならランニングにいく、雨なら家で映画をみるとします。
if文の入れ子(ネスト)のコード
tomorrow = "雨"
if tomorrow != "晴れ":
if tomorrow != "曇り":
if tomorrow == "雨":
print("映画をみる")
else:
print("雪だるまつく~ろ~♪")
else:
print("ランニングにいく")
else:
print("買い物にいく")
【出力結果】
映画をみるif文の入れ子(ネスト)のアルゴリズム
また、上記コードの流れ(アルゴリズム)は次のようにしています。

elif文でわかりやすく
if文の入れ子(ネスト)でも条件分岐を行い、複雑な場合分けを行う事はできます。しかし、コードを見ただけで、上記のアルゴリズムがすぐに思い浮かぶでしょうか?
先ほどの例は単純なので、まだわかりやすい方かもしれません。しかし、もっと複雑になるとコードの可読性が下がり、メンテンナンス時にコード変更によるバグが発生する可能性があります。
そこで登場するのが、elif文です。elifとはelse ifの略で「他にもし…」といったようにif文に合致しなかった場合の条件分岐(if)を追加する事ができます。
if、elif、elseの優先順位
if-else文にelifがある場合には、ifとelseの間に書かれます。また、優先順位は次のようになります。
1)最初のif文が評価されます。Trueの場合、if文のブロックの内容が実行されます。Falseの場合、elif文が評価されます。
2)最初のif文で条件に合わなかった(Falseの)場合に、次にelif文が評価されます。elif文が複数ある場合は上から順番に評価されていき、どこかのelif文がTrueの評価を返したら、そのelif文のブロックの内容が実行され、それ以降のelif文は無視されます。
3)elif文がFalseを返す限り、上から順番にelif文が評価されていきます。
4)どのelif文もTrueを返さなかったら、最後にelse文のブロックが実行されます。
elif文を用いた例
冒頭のコードをelif文を用いて、書き換えてみましょう。次のようになります。
tomorrow = "曇り"
if tomorrow == "晴れ":
print("買い物にいく")
elif tomorrow == "曇り":
print("ランニングにいく")
elif tomorrow == "雨":
print("映画をみる")
else:
print("雪だるまつく~ろ~♪")
【出力結果】
ランニングにいくどうでしょうか。見やすく感じませんか?プログラムの流れ(アルゴリズム)は以下のようになります。冒頭で書いたif文の入れ子(ネスト)とほぼ同じです。


コメント