きっかけなんて些細なモンですよ。

NEW GAME!を観ました。プログラミング始めます。(10)

得意げなねねっち!すきだ!!!!!!!!!!

f:id:kirintt:20170831192509p:plain

今回は、これまでの内容を改良する方法を考えます!

☟前回の記事 

nagoyanofes.hatenadiary.jp

※基本的に、愛知大学の有澤先生がプログラミングの講義で使用しているテキスト「Pythonによるプログラミング入門」に沿って進めています。

Python 2.7.13を使用しています。

 

 

サンプルプログラム

1か月分のカレンダーを表示するプログラム(「Pythonによるプログラミング入門」p. 13)。

f:id:kirintt:20170826201139p:plain

今日のキーワード

バグ(Bug)

プログラムの中の欠陥をバグ (Bug = 虫) と言う。

(引用元:Pythonによるプログラミング入門, p. 25)

 

例)

次の出力

f:id:kirintt:20170831193345p:plain

はプログラム

 

f:id:kirintt:20170831193417p:plain

によって得られる。このプログラムでは木曜日から始まるカレンダーに変更する時に、2 カ所の変更が必要になる。一カ所の変更で済むようにプログラムを改良しなさい。

(引用元:, p. 24)

f:id:kirintt:20170831193517p:plain

  • "---"の数と改行する位置"x%7"の和が7であることを利用。
  • nはカレンダーの1日目の曜日に対応する。n=0が日曜、n=1が月曜、…n=6が土曜となる。
  • たとえば、上のプログラムではn=3だが、このとき、
  • 1つ目のfor...range(0, 3)となり、"---"は3回表示される。
  • 2つ目のfor...if x%7 == (7-3)となり、7-3=4であるから、xを7で割った余りが4のとき改行される。
  • しかし、このプログラムではn=0(日曜)の結果だけがおかしくなる。

f:id:kirintt:20170831194514p:plain

  • n=0のとき、if x%7 == (7-0)となり、7-0=7であるから、xを7で割った余りが7のとき改行される。
  • ある数を7で割った余りが7となることは有り得ない。そのため、改行が1度も実行されなかった。
  • このように、特定の条件でのみバグが発生することがある。
  • この例でもそうであるが、処理すべき数値が、ある範囲にある時、バグは端で発生しやすい。

    (引用元:, p. 25)

 

問1

 n=0 の場合にも正しく動くようにプログラムを修正しなさい。

ヒント: 初等的な解決法を 2 つ挙げる。(1) 2 つ目の for 文の前に、n==0 場合に n=7 となるような命令を追加する。(2) (7-n) を (7-n)%7 に置き換える。

(引用元:Pythonによるプログラミング入門, p. 25)

f:id:kirintt:20170831195514p:plain

  • ヒントで示された1つ目の解法。
  • 1つ目のforの前にif n == 0:を入れると、"---"が7つ表示されてしまうので注意。
  • ちなみに、このプログラムはn = 1~6でも正しく結果が表示された(下図参照)。

f:id:kirintt:20170831195836p:plain

 

今日のミス

特になし!やったね!! 

 

以上。

ある条件のときだけ発生するバグ…普通に見落としそうだなぁ。

 

☟次

nagoyanofes.hatenadiary.jp