見出し画像

仕様?バグ?独学コンピューターサイエンティスト 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)


𝑷𝑺

清水川貴之さんからの見解をいただきました。




#日経BP
#独学コンピューターサイエンティスト
#独CS #selftaughtcoder
#清水川貴之 さん
#CoryAlthoff さん
#Python #Python3
#note
#バグ #bug