東大/京大のプログラミングの授業でも使われている(無料で読める、東大/京大の「Python教科書」電子書籍)、「Pythonプログラミング入門」の練習問題の解説を連載しています。
この記事では、CHAPTER 4 「論理・比較演算と条件分岐の基礎」 の問題を紹介します。
この連載シリーズでは、教科書に載っている解答が最適でない場合や、明らかに間違っている場合についても、より良い解法や別解を掲載します。
自分の回答が正解か不安だ、という方も参考になると思います。
教科書のHTML版やPDF版のリンクも掲載していますので、是非ともご活用ください。(この記事ではPDF版の章立てを基準にしています)
教材リンクはこちら↓
目次
4.2.1 練習 absolute
問題
数値 x の絶対値を求める関数 absolute(x) を定義してください。
Python には abs という絶対値を求める組み込み関数が用意されていますが、それを使わずに定義してください。
4.2.1 回答
模範解答は以下になります。
非の打ち所がありませんね。この回答がベストだと思います。
def absolute(x):
if x < 0:
return -x
else:
return x
別解1
if 文の判定条件を0以上に変更することもできます。
模範解答の条件式と反転しているので、return で返している値も模範解答と反対になっています。
意味は殆ど同じですが、ニュアンスが若干変わりますので、より読み手に意図が伝わりやすいと思う方の条件式を選ぶことをオススメします。
def absolute(x):
if x >= 0:
return x
else:
return -x
別解2
else 文を省略して以下の様に書くこともできます。
こちらの書き方を好む人も居ます。
def absolute(x):
if x < 0:
return -x
return x
4.2.2 練習 sign
問題
x が正ならば 1、負ならば -1、ゼロならば 0 を返す関数 sign(x) を定義してください。
4.2.2 回答
模範解答は以下になります。
間違ってはいませんが、もっと良い制御式があります。
def sign(x):
if x < 0:
return -1
if x > 0:
return 1
return 0
別解1
elifを使うという方法があります。
elif は else if の略で、最初のif 文の条件式が満たされなかった場合(真偽値がfalseの場合)に次の判定文として処理されます。
elif の条件も満たされない場合、更に次の else へ処理が移ります。
def sign(x):
if x < 0:
return -1
elif x > 0:
return 1
else:
return 0
別解2
elif はここまでの教科書の説明に出てきてなかったので、敢えて使わなかったのかも知れません。
elif は else if と同等なので、以下の様に書いても同じことが実現できます。
def sign(x):
if x < 0:
return -1
else:
if x > 0:
return 1
else:
return 0
4.2.2 解説 - なぜ if-if より if-elif の方が良いのか?
ポイント
練習問題の模範解答では、if-if と if文を連続する方法で制御を実現していました。
別解で elif を使う方法を紹介しましたが、なぜ elif を使う方が良いのか詳しく解説します。
違いは、1つ目のif文が true(真)となった時に、2つ目のif文を判定するかしないかという点です。
if-if の場合、1つ目の判定結果に関わらず、必ず2つ目も判定されてしまいます。(今回の練習問題の様にif文の中でreturnしている場合は例外)
if-elifの場合、1つ目の判定でtrueになった場合は elif以降の判定文は明確に処理されません。
そのため、ソースコードの読み手が考えなければならないことを減らしてくれる効果があります。
つまり、読み手(レビュアーなど)に配慮した可読性の高いコードとなり、より良いコードであると言えます。
通常、elif は同じ文脈の判定式に対して適用します。
以下の様に、全く違う文脈(ifはxの判定、elifはyの判定)の判定を行う場合は、素直に if を2つ並べる方が良い場合が多いです。
if x < 0:
elif y > 0:
以下の様に、同じ文脈(共にxの判定)の場合に、elifを使うと可読性の高いコードになるでしょう。
if x < 0:
elif x > 0:
参考
- Pythonプログラミング入門 — Pythonプログラミング入門 documentation (utokyo-ipp.github.io)
- PDF版 Pythonプログラミング入門 (utokyo-ipp.github.io)
- Colaboratory へようこそ - Colaboratory (google.com)
- 無料で読める、東大/京大の「Python教科書」電子書籍:AI・機械学習の無料電子書籍 - @IT (itmedia.co.jp)
- 4.1. if 文 - Python 3.11.2 ドキュメント
- 組み込み関数 abs() — Python 3.11.2 ドキュメント
前のCHAPTERはこちら
-
【教科書解説】Pythonプログラミング入門 (CHAPTER 3 変数と関数の基礎) 練習問題
東大/京大のプログラミングの授業でも使われている(無料で読める、東大/京大の「Python教科書」電子書籍)、「Pythonプログラミング入門」の練習問題の解説を連載しています。 この記事では、CHA ...
続きを見る
次のCHAPTERはこちら
-
【教科書解説】Pythonプログラミング入門 (CHAPTER 6 文字列 (string)) 練習問題
「Pythonプログラミング入門」は、東大・京大のプログラミングの授業でも使用されており、無料で読める、東大/京大の「Python教科書」電子書籍で公開されています。 この記事では、CHAPTER 6 ...
続きを見る