はじめに
Pythonその4 Advent Calendar 2019 20 日目の記事です。
背景
みなさん、“百ます計算”をしていますか?してましたか?九九を計算するトレーニングとして使われるものです。実は、@daikikatsuragawa はその道を極めており、地元では負け知らずでした。
時は流れ、2019年某日、ふと思いました。
「先生、あれ、自力で作っていたのか…?」
もし、そうであった場合、以下のデメリット(面倒)があります。
- 行と列をランダムに並び替える面倒
- 解答を計算する面倒
「先生から教わったもので…先生に還元したい…」そんなモチベーションにより、“百ます計算ジェネレーター”と銘打って動作するPythonのプログラムを書きました。
お父さん、お母さんがお子さんに作ってあげてもいいかもしれませんね。
Pythonを選択した理由
- Google Colaboratoryにより実行可能です。(環境構築の必要なし!)
百ます計算ジェネレーター
百ます計算ジェネレーター.py
import pandas as pd
# 100ます計算の問題と解答をデータフレーム型で出力する関数
def hsc_gen():
# 行列の長さ
hsc_range = 10
# 0〜9を格納した元となる配列
nums = pd.np.array(range(hsc_range))
# 配列をシャッフル!
pd.np.random.shuffle(nums)
r = nums.copy()
# 配列をシャッフル!
pd.np.random.shuffle(nums)
c = nums.copy()
# 回答欄を空白にしたデータフレームの作成
hsc_q = pd.DataFrame(pd.np.zeros((hsc_range, hsc_range), dtype=object), index=r, columns=c)
for i in list(range(hsc_range)):
for j in list(range(hsc_range)):
hsc_q[i][j]=""
# 掛け算の結果をデータフレームに代入
hsc_a = pd.DataFrame(pd.np.outer(r, c), index=r, columns=c)
return hsc_q, hsc_a
hsc_q, hsc_a = hscgen()
# csvとして出力
hsc_q.to_csv('hsc_q.csv')
hsc_a.to_csv('hsc_a.csv')
これで、csvに書き出しました。あとは生成したファイルをエクセルなどで開いてよしなに枠をつけたら完成!(↓出力例)
hsc_q.csv
6 | 0 | 7 | 5 | 4 | 2 | 1 | 3 | 9 | 8 | |
---|---|---|---|---|---|---|---|---|---|---|
8 | ||||||||||
6 | ||||||||||
4 | ||||||||||
0 | ||||||||||
9 | ||||||||||
1 | ||||||||||
5 | ||||||||||
2 | ||||||||||
7 | ||||||||||
3 |
hsc_a.csv
6 | 0 | 7 | 5 | 4 | 2 | 1 | 3 | 9 | 8 | |
---|---|---|---|---|---|---|---|---|---|---|
8 | 48 | 0 | 56 | 40 | 32 | 16 | 8 | 24 | 72 | 64 |
6 | 36 | 0 | 42 | 30 | 24 | 12 | 6 | 18 | 54 | 48 |
4 | 24 | 0 | 28 | 20 | 16 | 8 | 4 | 12 | 36 | 32 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
9 | 54 | 0 | 63 | 45 | 36 | 18 | 9 | 27 | 81 | 72 |
1 | 6 | 0 | 7 | 5 | 4 | 2 | 1 | 3 | 9 | 8 |
5 | 30 | 0 | 35 | 25 | 20 | 10 | 5 | 15 | 45 | 40 |
2 | 12 | 0 | 14 | 10 | 8 | 4 | 2 | 6 | 18 | 16 |
7 | 42 | 0 | 49 | 35 | 28 | 14 | 7 | 21 | 63 | 56 |
3 | 18 | 0 | 21 | 15 | 12 | 6 | 3 | 9 | 27 | 24 |
おわりに
Pythonで百ます計算ジェネレーターを作成しました。プログラミングを使って、お世話になった人へ還元するのもいいことですね。
付録
他形式への出力方法
htmlファイルとして出力
hsc_q.to_html('hsc_q.html')
hsc_a.to_html('hsc_a.html')
Markdown記法として出力
!pip install pytablewriter
import pytablewriter
writer = pytablewriter.MarkdownTableWriter()
writer.from_dataframe(hsc_q)
writer.write_table()
writer.from_dataframe(hsc_a)
writer.write_table()
変更点
投稿以降の大きな変更点を以下に追記します。
- プログラムの修正。@konandoiruasa さんからのアドバイスを元に改善し、再利用が容易にできるよう、主要な部分を関数としました。(2019/12/23)