九九表を作成する その1
最初はfor文の二重ループを使って九九表を作成しました。
Python3.6から導入されたf文字列を使用して桁が揃うように出力されるようにしました。
kuku_1.py
for i in range(1, 10):
for j in range(1, 10):
print(f'{i * j:4d}', end="") # 4桁の幅で出力されるよう指定
print("\n", end="")
# 実行結果
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
九九表を作成する その2
その1と基本的には同じですが、出力の部分で書式化演算子「%」を使っています。
CやJavaなど他のプログラミング言語に慣れている方にはお馴染みな書き方だと思います。
kuku_2.py
for i in range(1, 10):
for j in range(1, 10):
print('%2d' %(i * j) , end=' ') # 書式化演算子「%」を使用
print()
# 実行結果はその1と同じです
itertoolsを使う
itertools.product()を使って複数のリストの直積(デカルト積)を生成することで、forの入れ子による多重ループよりも簡潔にコードを書くことができます。
kuku_3.py
from itertools import product
for i, j in product(range(1, 10), range(1, 10)):
print(f'{i} * {j} = {i * j}')
# 実行結果
1 * 1 = 1
1 * 2 = 2
1 * 3 = 3
1 * 4 = 4
1 * 5 = 5
1 * 6 = 6
1 * 7 = 7
1 * 8 = 8
1 * 9 = 9
2 * 1 = 2
2 * 2 = 4
2 * 3 = 6
2 * 4 = 8
2 * 5 = 10
2 * 6 = 12
2 * 7 = 14
2 * 8 = 16
2 * 9 = 18
3 * 1 = 3
3 * 2 = 6
3 * 3 = 9
3 * 4 = 12
3 * 5 = 15
3 * 6 = 18
3 * 7 = 21
3 * 8 = 24
3 * 9 = 27
4 * 1 = 4
4 * 2 = 8
4 * 3 = 12
4 * 4 = 16
4 * 5 = 20
4 * 6 = 24
4 * 7 = 28
4 * 8 = 32
4 * 9 = 36
5 * 1 = 5
5 * 2 = 10
5 * 3 = 15
5 * 4 = 20
5 * 5 = 25
5 * 6 = 30
5 * 7 = 35
5 * 8 = 40
5 * 9 = 45
6 * 1 = 6
6 * 2 = 12
6 * 3 = 18
6 * 4 = 24
6 * 5 = 30
6 * 6 = 36
6 * 7 = 42
6 * 8 = 48
6 * 9 = 54
7 * 1 = 7
7 * 2 = 14
7 * 3 = 21
7 * 4 = 28
7 * 5 = 35
7 * 6 = 42
7 * 7 = 49
7 * 8 = 56
7 * 9 = 63
8 * 1 = 8
8 * 2 = 16
8 * 3 = 24
8 * 4 = 32
8 * 5 = 40
8 * 6 = 48
8 * 7 = 56
8 * 8 = 64
8 * 9 = 72
9 * 1 = 9
9 * 2 = 18
9 * 3 = 27
9 * 4 = 36
9 * 5 = 45
9 * 6 = 54
9 * 7 = 63
9 * 8 = 72
9 * 9 = 81
NumPyのブロードキャストを利用する
NumPyのブロードキャスト(形状の自動変換)を上手く使えば配列の掛け算一回で九九表が作成できます。ちなみに私はNumPyを初めたころ、配列の公差を指定するarangeをarrangeだと勘違いしていました(笑)
kuku_brdcast.py
import numpy as np
row = np.arange(1, 10).reshape(1, -1) #[[1, 2, 3, 4, 5, 6, 7, 8, 9]]
column = np.arange(1, 10).reshape(-1, 1) #[[1], [2], [3], [4], [5], [6], [7], [8], [9]]
kuku = row * column
print(kuku)
# 実行結果
[[ 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]]