![見出し画像](https://assets.st-note.com/production/uploads/images/96998950/rectangle_large_type_2_dcdd0252be193a7f41df79d9e5a40e0f.jpeg?width=1200)
仕様?バグ?独学コンピューターサイエンティスト p105
以下は、独学コンピューターサイエンティスト 第1部 第5章 p105 の、最後の数字を探すサンプルプログラム(完成形)です。
s = "Buy 1 get 2 free"
nl = [c for c in s if c.isdigit()][-1]
print(nl)
このプログラムには、検出するリストに数字が含まれていないと IndexError: list index out of range で落ちるバグ?があるので、自分でプログラミングする際は、このルーチンを取り込まないようにしましょう。
以下が落ちるパターンのサンプルプログラムと、その実行結果です。
s = "Buy @ get @ free"
nl = [c for c in s if c.isdigit()][-1]
print(nl)
実行結果
Traceback (most recent call last):
File "/home/gundam/python/p105-3x.py", line 2, in <module>
nl = [c for c in s if c.isdigit()][-1]
IndexError: list index out of range
蛇足ですが、このバグ?を回避する一例を示しておきます。
s = "Buy @ get @ free"
nl = nl[-1] if (nl := [c for c in s if c.isdigit()]) else "None"
print(nl)
𝑷𝑺
清水川貴之さんからの見解をいただきました。
ありがとうございます。これはプログラムの不具合と言うよりは数字を含まない場合に期待する結果が未定義で、定義次第ではIndexErrorがバグとも仕様とも考えられます。本書は読み手の理解しやすさを最優先に書かれていますが、もう一言前提説明があっても良い箇所だと思います。
— Takayuki Shimizukawa (@shimizukawa) February 1, 2023
#日経BP
#独学コンピューターサイエンティスト
#独CS #selftaughtcoder
#清水川貴之 さん
#CoryAlthoff さん
#Python #Python3
#note
#バグ #bug