snovaのブログ

主にプログラミングやデジタルコンテンツについて書きます。最近はPython, Flutter, VRに興味があります。

小中学校の計算問題と解答を生成

イントロダクション

たまにはプログラムを書かないと腕がなまりそうなので、簡単なものを作ってみました。 小学校算数や中学校数学の計算問題と解答を作成し、ファイルに出力するプログラムです。

小学算数と中学数学の範囲

各学校ではどのような内容を学ぶのか、文科省のHPで調べ、ざっくりまとめてみました。

まず、小学校

  • 四則演算(筆算を含む)
  • 表とグラフ
  • 平面図形と立体図形
  • 分数、小数
  • 割合、比例
  • その他(魔法陣やパズル)

次に、中学校

  • 数と式
  • 方程式
  • 関数
  • 平面図形と立体図形
  • 資料の活用
  • 証明

四則演算が出来ることが前提で進んでいくので、今回は四則演算(小数、正負の数を含む)の問題生成プログラムを作成していきます。

流れ

今回のプログラムの流れをまとめます。

  1. 計算設定(問題数の設定等)
  2. ランダムに問題を生成
  3. 解答を作成
  4. 出力

計算設定については、複雑にしすぎると際限なくパターンを考えないといけないので、今回は4つだけにしました。 - 問題数 - 問題の桁数 - 負の数を含めるか - 小数を含めるか

また、出力形式はTSVにしました。 (csvだと小数ありのとき読みにくかったので)

実際のプログラム

コメントも記載したプログラムです。

四則演算問題生成

githubでも共有します。

https://github.com/snova301/math_ope4_gen

結果

add
 [['6' '+' '5' '=' '11']
 ['3' '+' '5' '=' '8']
 ['6' '+' '7' '=' '13']
 ['6' '+' '7' '=' '13']
 ['6' '+' '5' '=' '11']
 ['6' '+' '4' '=' '10']
 ['8' '+' '8' '=' '16']
 ['1' '+' '5' '=' '6']
 ['7' '+' '4' '=' '11']
 ['8' '+' '8' '=' '16']]

diff
 [['6' '-' '2' '=' '4']
 ['4' '-' '4' '=' '0']
 ['4' '-' '4' '=' '0']
 ['8' '-' '3' '=' '5']
 ['8' '-' '6' '=' '2']
 ['8' '-' '7' '=' '1']
 ['5' '-' '3' '=' '2']
 ['7' '-' '4' '=' '3']
 ['7' '-' '2' '=' '5']
 ['6' '-' '2' '=' '4']]

multiply
 [['2' '*' '1' '=' '2']
 ['8' '*' '4' '=' '32']
 ['8' '*' '4' '=' '32']
 ['1' '*' '2' '=' '2']
 ['4' '*' '4' '=' '16']
 ['7' '*' '3' '=' '21']
 ['2' '*' '2' '=' '4']
 ['1' '*' '1' '=' '1']
 ['4' '*' '6' '=' '24']
 ['4' '*' '8' '=' '32']]

 div
 [['4' '/' '4' '=' '1.0']
 ['5' '/' '5' '=' '1.0']
 ['5' '/' '2' '=' '2.5']
 ['4' '/' '4' '=' '1.0']
 ['4' '/' '7' '=' '0.5714285714285714']
 ['3' '/' '3' '=' '1.0']
 ['6' '/' '1' '=' '6.0']
 ['2' '/' '6' '=' '0.3333333333333333']
 ['6' '/' '8' '=' '0.75']
 ['7' '/' '6' '=' '1.1666666666666667']]

今後の展望

方程式、関数、図形問題、証明問題をしたいと思いますが、個人的には文章題の生成と解答がどうにかしてできないか考えてます。 上記の件がうまくいけば、数学だけではなく、理科、国語、社会にも応用していきたいと思います。

Google Play and the Google Play logo are trademarks of Google LLC.