はじめに

やあ、こんにちは。今日の目標は『九九の表』を作ることだ。前回学んだ『ループの入れ子構造(ネスト)』の応用編だと思ってほしい。

はい、よろしくお願いします。
例題

前回の第13回で記号『*』を用いていろいろな図形を描いたが、『*』の代わりに数字を表示することを考えよう。まずは下のプログラムを実行するとどうなるかを考えてほしい


これは前回見た『2重ループ』になっていますね。3行目のfor文の回数が (1,tate+1) となっていますが、tate=9 よりこれは (1,10) ということですね。これは1以上10未満を意味するので i は1から9まで動きます。

うむ、for文の回数の定義についてしっかり覚えているな!


そして、j も同様に1から9まで動くので、4・5行目のfor文により1から9まで連続して表示され、6行目のprint関数によって改行される・・・
うん、わかったぞ!実行結果は『123456789』が9行表示されます。

正確な読み取りができていると思うぞ。答え合わせはいつも通り実行して確認してごらん。

はい、きょうは『file34』から書いていきます。


できました!予想通りの結果でした!
空白を入れる

プログラムを読み取る力が本当についてきたな!
今回の例ではすべての数が1桁なので問題ないが、九九の表を作成するためには2桁の数も表示したいため、数の間に空白を入れる必要がある。

なるほど。

ということで、次は上の表において数の間に空白を入れるためにはどうすればよいか考え、file34のプログラムに書き加えてほしい。ここで、空白は『 ‘ ’ 』を用いて表すぞ。つまり、シングルクォーテーションの間に空白を入れるのだ。

はい、数の間に空白を入れるには・・・ここに入れると良さそうだぞ。



できました!5行目のprint関数の『 j 』と 『end=’ ‘』の間に『 ‘ ’ 』を入れることにより、しっかり数の間に空白が入りました!
九九の表の作成

うむ、良さそうだな。では、いよいよ九九の表を作成してみよう!上のfile34のプログラムをコピーして、新しい『file35』に張り付けてから考えてみよう。

はい、file34を利用するとしたら、ここだけ変更すればいけるんじゃないかな?



できました!5行目のprint関数の『 j 』を『 i*j 』に書き換えただけで完成です!
より美しくする

うむ、一応は完成したが縦の列がそろってなくて見た目がちょっとよろしくないだろう?ということで最後の問題を出そう。
file35のプログラムにおいて数が10より小さいときは数の前に空白文字を表示するようにして、以下のように縦の列がそろうようにプログラムを改良しよう!


最後はヒントなしで自分で考えて書いてほしい。これまでに学んだこと何でも使っていいから頑張ってくれ。

はい、頑張ります!
格闘の末・・・


できました!数が1桁の場合と2桁の場合で処理が異なるので、『if-else文』を使いました。結果は次の通りです。


5行目のif文は『 i*j 』が10未満、つまり i*j が1桁のとき6行目のprint関数の中で、i*j の前にシングルクォーテーションの間にスペースを一つ入力した空白、『 ‘ ’ 』を入れました。そして、i*j が2桁のときは i*j の前にシングルクォーテーションの間にスペースを入れずに単に二つ並べただけの『 ‘ ‘ 』を入れるときれいに揃いました。

意外と大変だったろう?

はい、なかなかきれいに表示されず苦労しました。試行錯誤の結果、シングルクォーテーションの間に入力するスペースの数によって表示されるスペースの間隔が変化することに気づきました。それから色々試した結果できました。

うむ、その試行錯誤するということがとても大事だな。プログラムを書くとき、なかなかうまくいかないときは多々あるが、そういう時は試行錯誤するしかないのだ。それを経験してほしかったのだ。

試行錯誤の結果、きれいに表示されたときは本当に気持ち良かったです!

うむ、よく頑張ったな。
今回の書き方を応用すれば様々な数表が美しく書けるようになるぞ。
では今日はここまでにしよう。次回何をやるのかはこれから考えるので楽しみにしてくれ。

はい、ありがとうございました!
コメント