【Python】forループを使って九九テーブルを作る!


今回はpythonのforループを使って、九九テーブルを表示する関数を作ります!
完成した表は下の通りです。
引数で渡した数のテーブルを返すように汎用性も高めました!
multiplication_table(9)
>> 1 2 3 4 5 6 7 8 9
1 1 2 3 4 5 6 7 8 9
2 2 4 6 8 10 12 14 16 18
3 3 6 9 12 15 18 21 24 27
4 4 8 12 16 20 24 28 32 36
5 5 10 15 20 25 30 35 40 45
6 6 12 18 24 30 36 42 48 54
7 7 14 21 28 35 42 49 56 63
8 8 16 24 32 40 48 56 64 72
9 9 18 27 36 45 54 63 72 81

表示をしやすくするためにpandasのデータフレームを使っているにゃ。綺麗にデータを見るならデータフレームが一番だにゃ。
それでは、順番にいくんだにゃ。
- forループ(二重)やリスト(二重)の使い方について
- 参照渡しやcopy関数について
- pandasライブラリがどんなものか
- 関数の汎用性(はんようせい)の高め方について
forループで九九を作る

まずは、forループを使って、九九を計算します。forを二重にすることで、1の段、2の段と順に計算して、その結果を出力しています。計算だけならこれで十分ですね。
for i in range(1, 10):
for j in range(1, 10):
print(i * j)
>>1
2
3
4
5
・
・
・
54
63
72
81
リストに入れていこう

次に、計算結果を順にリストに入れていきます。リストも二重化して、各段で一つのリストを作るようにします。
でも、下の例では、リストの追加がうまくいかず、失敗していますね。
# 失敗例。リストの追加が参照になっている。
col = []
ind = []
for i in range(1, 10):
for j in range(1, 10):
col.append(i * j)
ind.append(col)
col.clear()
print(ind)
>> [[], [], [], [], [], [], [], [], []]

リストへ要素を追加するappend()は参照渡しになっているんだにゃ。そのため、一度クリアしたときに、渡したリストが消えてしまっているんだにゃ。
やりたいのは、変数colの値だけ渡して、colは計算結果の受け皿にしたいんだにゃ。
そこで登場するのが、値だけコピーするcopy関数だにゃ。
import copy
col = []
ind = []
for i in range(1, 10):
for j in range(1, 10):
col.append(i * j)
ind.append(copy.copy(col))
col.clear()
print(ind)
>> [[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]]

copy関数を使うことで、問題解決しましたね。だいぶ最初の例に近づいてきました。
次に、データフレームにして、表示をしっかりして見ましょう。
pandasでデータフレームへ変換

pandasを使ってリストをデータフレーム化します。綺麗に表示されるので見やすくていいですね。インデックスも表示されるので、どこの段なのかわかりやすい点もGoodです。
import copy
import pandas as pd
col = []
ind = []
for i in range(1, 10):
for j in range(1, 10):
col.append(i * j)
ind.append(copy.copy(col))
col.clear()
df = pd.DataFrame(ind)
df.index = [i for i in range(1, 10)]
df.columns = [i for i in range(1, 10)]
print(df)
>> 1 2 3 4 5 6 7 8 9
1 1 2 3 4 5 6 7 8 9
2 2 4 6 8 10 12 14 16 18
3 3 6 9 12 15 18 21 24 27
4 4 8 12 16 20 24 28 32 36
5 5 10 15 20 25 30 35 40 45
6 6 12 18 24 30 36 42 48 54
7 7 14 21 28 35 42 49 56 63
8 8 16 24 32 40 48 56 64 72
9 9 18 27 36 45 54 63 72 81

インデックスとカラムは、指定しないと0から始まるんだにゃ。そのため、インデックスとカラムに1から始まるリストを渡しているんだにゃ。ちなみに、上の[i for i in range(1, 10)]は内包表記という表現方法で、簡単なものならこの方がわかりやすいんだにゃ。
汎用性が高い関数に

最後の汎用性を高めるため、関数化して、引数に何段までのテーブルにするか数を受け取れるようにします。
def multiplication_table(max_num):
max_num += 1
col = []
ind = []
for i in range(1, max_num):
for j in range(1, max_num):
col.append(i * j)
ind.append(copy.copy(col))
col.clear()
df = pd.DataFrame(ind)
df.index = [i for i in range(1, max_num)]
df.columns = [i for i in range(1, max_num)]
print(df)

rangは受け取った数字の直前までの一覧を作るんだにゃ。だから、10を受け取ると9まで15を受け取ると14までとなるので、最初に1を足しているんだにゃ。
上の関数を使うと下のようにできるんだにゃ。
multiplication_table(9)
>> 1 2 3 4 5 6 7 8 9
1 1 2 3 4 5 6 7 8 9
2 2 4 6 8 10 12 14 16 18
3 3 6 9 12 15 18 21 24 27
4 4 8 12 16 20 24 28 32 36
5 5 10 15 20 25 30 35 40 45
6 6 12 18 24 30 36 42 48 54
7 7 14 21 28 35 42 49 56 63
8 8 16 24 32 40 48 56 64 72
9 9 18 27 36 45 54 63 72 81
multiplication_table(15)
>> 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
2 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30
3 3 6 9 12 15 18 21 24 27 30 33 36 39 42 45
4 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60
5 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75
6 6 12 18 24 30 36 42 48 54 60 66 72 78 84 90
7 7 14 21 28 35 42 49 56 63 70 77 84 91 98 105
8 8 16 24 32 40 48 56 64 72 80 88 96 104 112 120
9 9 18 27 36 45 54 63 72 81 90 99 108 117 126 135
10 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150
11 11 22 33 44 55 66 77 88 99 110 121 132 143 154 165
12 12 24 36 48 60 72 84 96 108 120 132 144 156 168 180
13 13 26 39 52 65 78 91 104 117 130 143 156 169 182 195
14 14 28 42 56 70 84 98 112 126 140 154 168 182 196 210
15 15 30 45 60 75 90 105 120 135 150 165 180 195 210 225

forループにいろいろな関数を加えると簡単にこのようなツールができるのがpythonの強みですね。ここから、エクセルに出力しても良いですね。色々イメージを膨らませることがプログラミングを学ぶ上で大切ですね。
プログラミングを学ぶならTechAcademy(テックアカデミー)がおすすめ!

独学で苦戦している人は、一度しっかりと基礎を学ぶと次のステップへ進めますよ。今のおすすめは、TechAcademy(テックアカデミー)ですね。
- オンラインで選抜された現役エンジニアから学ぶことができる
- 自宅からWeb制作・プログラミング・アプリ開発など幅広い分野を学べる
- 学ぶだけではなく、転職の支援、副業に活かせるスキルの習得、副業の仕事紹介まで行っている

無料体験や相談もあるから、一度試してみてもいいんだにゃ!
\無料体験、無料相談はこちらから/