Python が九九 81匹
【実習】 まず、for 文で2重ループを作ろう。九九の表を作るには、大回りで9回転、小回りで9回転する間に掛け算した結果を表示すればよい。
for x in range(9):
for y in range(9):
print(x*y)
さて、これを実行してみると、確かに81回掛け算して、81個の数値を表示します。けれども、九九の表とはまるで違う。
ということで、上のプログラムを修正して、でも2重ループの構造は生かして、みんなが見慣れた、下のような「九九の表」を作ってください。
1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
4 8 12 16 20 24 28 32 36
5 10 15 20 25 30 35 40 45
6 12 18 24 30 36 42 48 54
7 14 21 28 35 42 49 56 63
8 16 24 32 40 48 56 64 72
9 18 27 36 45 54 63 72 81
では、どうぞ。
まず、元のプログラムのどこがマズかったか、なぜ失敗したか、どうすれば良いのかというと、ポイントは3つあります。
Python では整数は 0 から始まる。だから上の書式「for x in range(9):」では x は 0 から 8 まで 9 回転する。y も同様。
→ その結果、0×0=0 から 8×8=64 までの掛け算になっている。掛け算結果を表示した後、その都度改行する。つまり全部縦表示になってしまって、表の形を成さない。
1桁の数と2桁の数が混在するが、隙間を調整しないと、左詰めになってしまって、ちょっと見にくい。
まず最初の点を修正するには、
for x in range(9):
for y in range(9):
print((x+1)*(y+1))
こう(↑)やるか、もしくは、こう(↓)やるかのどちらかでしょう。
for x in range(1,10):
for y in range(1,10):
print(x*y)
次に2つ目の点「改行するかしないか」ということについては、いったんこう(↓)してみましょう。
for x in range(9):
for y in range(9):
print((x+1)*(y+1),end="")
そうすると今度は、全部が1行に並んでしまって、これもとても表には見えません。しかも数と数の間に隙間が無いので、とても見にくい。
12345678924681012141618・・・(中略)・・・91827364554637281
考えてみると、各段を表示している間は改行しないけれども、各段が終わったタイミングでは改行させたいわけです。そのためには、小回り(y のループ)では改行しないけれど、大回り(x のループ)の中で改行すれば良い。
その点を修正したものが、これ(↓)です。
for x in range(9):
for y in range(9):
print((x+1)*(y+1),end=" ") # ← 改行しないが、空白入れた(2文字分)
print() # ← 改行のみ(小回りの外側、大回りの内側)
これで、だいぶ良い感じ(↓)になってきました。あともう少し。
1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
4 8 12 16 20 24 28 32 36
5 10 15 20 25 30 35 40 45
6 12 18 24 30 36 42 48 54
7 14 21 28 35 42 49 56 63
8 16 24 32 40 48 56 64 72
9 18 27 36 45 54 63 72 81
続いて、3つ目の点「1桁の数と2桁の数の隙間を調整」することについては、次(↓)のように if 文の中で1文字分の空白を入れることで解決します。
for i in range(9):
for j in range(9):
if (i+1)(j+1)<10: # ← もし1桁の数なら、
print(end=' ') # ← 1文字分の空白を入れる
print((i+1)(j+1),end=' ')
print()
以上で、完成です(↓)。
1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
4 8 12 16 20 24 28 32 36
5 10 15 20 25 30 35 40 45
6 12 18 24 30 36 42 48 54
7 14 21 28 35 42 49 56 63
8 16 24 32 40 48 56 64 72
9 18 27 36 45 54 63 72 81
めでたし、めでたし。
あーだこーだ、あーでもないこーでもない、うまくいきそう!と思ったけど、あれっ?なんかおかしい。。。こんなことを繰り返して、試行錯誤しているうちに、なんだか知らないけどうまくいったり、うまいやり方に気づいたり。こういう時間が実は大事なんだろうと思います。そして、そんな時間をとれることが、プログラム学習の良いところです。
あるいは、出来上がったものを隣の人と比べてみると、実行結果は同じでも、途中経過や考え方がずいぶん違っていたり。そんな経験が自然と出来てしまうことも、プログラム学習の良いところなのだと思います。
◇ ◇ ◇
〜 Python で2重ループ・3重ループ 〜
▷ Python が九九81匹
▷ Python で素因数分解する
▷ Python でピタゴラス数を書き出す