前の記事でelif文の書き方について、まとめました。今回はそのコードをもう少し複雑にしてみましょう。こちらの記事(if文の入れ子(Vol.2))で紹介したコードを、elifを用いて可読性を上げたいと思います。
if文の入れ子(ネスト)
さて、前の記事(if文の入れ子(Vol.2))では「明日の天候によって、行動を変える。また、所持金によっても行動が変化する」という次のようなプログラムを作りました。
作りたいプログラム
変数tomorrowと変数moneyの値により次の表のよう行動を変化させます。
| 所持金5000円以上 | 所持金5000円未満 | |
| 晴れ | デパートに買い物にいく | スーパーに買い物にいく |
| 曇り | スポーツジムにいく | ランニングにいく |
| 雨 | 映画館で映画をみる | 家で映画をみる |
| それ以外 | スケートにいく | 雪だるまつく~ろ~♪ |
if文の入れ子(ネスト)でのアルゴリズム
まず、アルゴリズムですが、次のようになります。

if文の入れ子(ネスト)のコード
このアルゴリズムをif文の入れ子(ネスト)で作成すると次のようなコードになります。
tomorrow = "雹"
money = 6000
if tomorrow != "晴れ":
if tomorrow != "曇り":
if tomorrow == "雨":
if money >= 5000:
print("映画館で映画をみる")
else:
print("家で映画をみる")
else:
if money >= 5000:
print("スケートにいく")
else:
print("雪だるまつく~ろ~♪")
else:
if money >= 5000:
print("スポーツジムにいく")
else:
print("ランニングにいく")
else:
if money >= 5000:
print("デパートに買い物に行く")
else:
print("スーパーに買い物にいく")
【出力結果】
スケートにいく正直、私はわかりにくくてしょうがないです。このコードをelif文を用いて書き換えてみます。
if、elif、elseを用いてわかりやすく
if-else文にelifがある場合には、ifとelseの間に書かれます。また、優先順位は次のようになります。
①最初のif文が評価されます。Trueの場合、if文のブロックの内容が実行されます。Falseの場合、elif文が評価されます。
②最初のif文で条件に合わなかった(Falseの)場合に、次にelif文が評価されます。elif文が複数ある場合は上から順番に評価されていき、どこかのelif文がTrueの評価を返したら、そのelif文のブロックの内容が実行され、それ以降のelif文は無視されます。
③elif文がFalseを返す限り、上から順番にelif文が評価されていきます。
④どのelif文もTrueを返さなかったら、最後にelse文のブロックが実行されます。
それでは先程のコードをelifを用いて書き換えてみましょう。
tomorrow = "雪"
money = 6000
if tomorrow == "晴れ":
if money >= 5000:
print("デパートに買い物にいく")
else:
print("スーパーに買い物にいく")
elif tomorrow == "曇り":
if money >= 5000:
print("スポーツジムにいく")
else:
print("ランニングにいく")
elif tomorrow == "雨":
if money >= 5000:
print("映画館で映画をみる")
else:
print("家で映画をみる")
else:
if money >= 5000:
print("スケートにいく")
else:
print("雪だるまつく~ろ~♪"
【出力結果】
スケートにいくどうでしょう。
elifの中にif文があって(晴れの時はif文の入れ子)、入れ子なのは避けられませんでしたが、各天候によって分けられているので、「晴れの時はここのブロックだけを見ればいいんだなぁ」とか「雨の時はここのブロックだけ見ればいいんだなぁ」とグッと見やすくなっていないでしょうか?
このelifを用いた可読性のアップはメンテナンス(改変)のし易さにも直結し、不要なバグの発生も抑えられますので、もしif文の入れ子をする必要がある場合、elifを用いた検討をオススメします。

コメント