*当ブログではアフェリエイト広告を利用しています。

python

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

momeq
モー
モー

今回は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 [テックアカデミー]

モー
モー

独学で苦戦している人は、一度しっかりと基礎を学ぶと次のステップへ進めますよ。今のおすすめは、TechAcademy(テックアカデミー)ですね。

TechAcademyのおすすめポイント
  • オンラインで選抜された現役エンジニアから学ぶことができる
  • 自宅からWeb制作・プログラミング・アプリ開発など幅広い分野を学べる
  • 学ぶだけではなく、転職の支援、副業に活かせるスキルの習得、副業の仕事紹介まで行っている
ニャー
ニャー

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

\無料体験、無料相談はこちらから/



記事URLをコピーしました