トピックス プログラム、シミュレーション

徐々に狭めていく

投稿日:

少しづつ慣れる」でプログラムコードのエラーを取り上げました。エラーを見つける方法を説明します。

資料をご覧ください → プログラムエラーその2

p.1 pythonを用い、「1,2,3,4,5」を順次加算した結果を表示するコードを作成します。左上のように誤ったコードで実行すると、左下のような「IndexError」が表示されました。ベテランの方は、このようなエラーコード自体書かないかもしれませんが、もし、このようなエラーが出て、原因が掴めない場合、「プリントデバッグ」という方法が有効です。あちらこちらに「print文」を挿入しておき実行します。今回3か所に挿入した実行結果が右上です。最後に15と表示されているにも関わらず、エラーがでています。最後のエラーは、コード最終行の結果ではなく、計算途中で得られた15なのです。プログラムは、もう一度for文を実行しようとしたのですが、配列より大きい数で実行しようとしてエラーとなったことが分かります。「プリントデバッグ」はこのように用います。

p.2 プログラムが長いと、プリントデバッグも大変です。この場合は「2分探索法」を用いて、半分の内どちら側に問題があるかを探ります。今回のプログラムはjavascriptを用い「18歳未満のチケット代が1,500円、18歳以上は2,000円、クーポンを用いると500円引きとなる場合、18歳でクーポンを使用しない場合は、いくらになるか」というコードです。左上を実行すると、2,000円となるところが1,500円になってしまいます。この原因を探るため、「console.log(price)」というpythonの「print」に相当するコード中間に挿入します。その結果が左下で、中間までは正解の2,000円でしたが、後半で1,500円に変わったことが分かります。この原因は、「if(useCoupen)=True」にあります。「」は代入を意味しTrueを代入したことにより、「False」で指定しているにもかかわらず、500円引きで結果を計算しています。 そこで、「」を比較の「==」に置き換えて修正します。右のコードです。実行結果は、正常の2,000円となりました。

p.3 pythonの場合は、「」で実行すると、この箇所が「SyntaxError」として表示されるので、2分探索法で調べるまでもありません。

プリントデバッグ」「2分探索法」何れも、徐々に狭めていき原因を掴む方法です。2分探索法については以前の「機械に勝る人間最大の武器は?」をご覧ください。

-トピックス, プログラム、シミュレーション

Copyright© 進化するガラクタ , 2024 All Rights Reserved Powered by STINGER.