Pythonで九九
エンジニアとして成長するためにアウトプットをして自分の復習になればと思い作成しました。
今回なぜ九九の表を作成するかというと最近娘(6歳)が九九をいえるようになって感心したのがきっかけです。
基本のfor文の復習も兼ねてます。
二重for文
九九の課題といえばfor文を二重で使うことでしょうか。
実際にコードを書いていきます。
for i in range(1, 10):
for j in range(1, 10):
print(i * j, 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
このような結果が得られると思います。
簡単にコードを見ていきます。
まず初めに、
for i in range(1, 10):
1から9までを順番にループします。
次の
for j in range(1, 10):
もう一つの1から9までを順番にループします。
print文の中は、
print(i * j, end=" ")
i * jで掛け算を行い、 end = " "でprint文で出力した値の末尾を指定しています。
この場合は横一列で九九の結果が表示されます。
仮に
end = " "がない場合は出力結果が縦に出力されます。
最後の行の
print()
改行のみを出力しています。
今回の場合では、1の段、2の段、、、9の段と分かれるようになります。
Pythonのprint文では何も指定しなければ、改行コード"\n" (バックスラッシュ+n)が末尾に出力されます。
ただ九九の表を作るだけならこれで終わりですが、
せっかくなので色々やってみたいと思います。
上の結果だと一桁と二桁が存在する関係で見栄えが悪いように見えないでしょうか?
せっかくなので右揃えで揃えてみたいと思います。
基本的なコードはそのままです。
for i in range(1, 10):
for j in range(1, 10):
ans=i * j
print(f'{ans:>4}', end="")
print()
コードをみていきます。
ans=i * j
print(f'{ans:>4}', end="")
九九の結果をansに代入します。
そのansが4桁分の幅以上を使うという意味です。
コードを実行すると下記のような結果が得られます。
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
この形なら見やすくてわかりやすいですね。
最後は九九の重複する三角形の部分をカットして表示してみます。
九九とは少しずれてしまうかもしれませんが。
初めにコードです。
for i in range(1, 10):
for j in range(1, 10):
if i <=j:
ans=i * j
else:
ans=" "
print(f'{ans:>4}', end="")
print()
今まではi * jで全て掛け算をしてきましたが、重複する部分をカットするために
if文を使って掛け算する値を絞ります。
if i <=j:
ans=i * j
jの値がi以上の時、掛け算を行うようにします。
else:
ans=" "
jの値がi以下の時は空白とします。
実行結果は下記です。
1 2 3 4 5 6 7 8 9
4 6 8 10 12 14 16 18
9 12 15 18 21 24 27
16 20 24 28 32 36
25 30 35 40 45
36 42 48 54
49 56 63
64 72
81
このようにコードを記述することで、重複部分をカットし、三角形の形で出力できるようになりました。
おわりに
今回はPythonで九九の表を作成しましたが、実際の現場でも二重for文を使うことはありますし、
データを取り出すだけでいいこともあれば、形を整えることが必要なこともあると思います。
これからも少しずつ成長しながら発信していきたいと思います。