Pythonで中学 数学の問題を自動作成するための基本を紹介します。
これを学ぶことで、自作の問題集を作成したり、テスト問題を瞬時に作成したりすることができるようになります。
はじめに
Pythonで中学 数学の問題を「解く」ことと、問題を「作成する」ことは全く別のことです。
前者は問題の「答えを得る」ために必要なことで、後者は「テスト問題を作る」ために必要なことです。
今回は後者のテスト問題をPythonで自動作成するための「基本}を紹介していきます。
ランダムな数を作る
問題作成でまず必要になるのはランダムな数「乱数」を作ることです。これが使えるようになると、自分でいちいち数を考える必要がなくなります。
Pythonでランダムな数を生み出すためには標準モジュール「rondom」をインポートします。
標準ライブラリなので、別途インストールする必要はありません(※Pythonはインストールされている必要があります)。
import random
a=random.randint(0,9)
print(a)
#出力結果→ 2
random.randint()を使うと、任意の範囲の整数を自動で作成することができます。
今回の出力結果は「2」でしたが、次に出力するときには2以外の数字(0から9までの整数)が表示されます。
かっこ内の整数の値を変えて、いろいろな数を生成してみましょう。
数字・記号を文字に置き換える
問題作成をする上で最も重要なことは、「数字を文字に置き換える」ことです。
これをしないと、Pythonで自動で計算され、答えのみが出力されます。
import random
a=random.randint(0,9)
b=random.randint(0,9)
print(a+b)
#出力結果→6
問題を作る上で必要になるのは「a+b」もしくは「2+4」といった答えが出る前の状態です。
したがって、出力結果にそれらが出るようにコードを書く必要があります。
実際にコードを書いてみましょう。
import random
a=random.randint(0,9)
b=random.randint(0,9)
c="+"
print(str(a),c,str(b))
出力結果→ 5 + 1
先のコードと違うのは、まず変数cを作り、そこに文字列としての"+"を割り当てていることです。
また、ランダムに作った数を入れた変数a、変数bは str() の中に入れられています。
これは数を文字列に変えるために使用したものです。
つまり、問題を作成する上では、数字や記号を常に文字列に変換して表記する必要があるということです。
小数を作る
中学数学では整数ではなく、小数を扱う問題もよく出題されます。
randomで小数を作ってみましょう。
import random
a=random.random() #(0.0以上1.0未満の浮動小数点数)
print(a)
#出力結果→0.06838515252079003
ここで困るのが小数点以下の数が多すぎるということです。
中学数学では小数第1位、第2位あたりの数を使うことが多いので、余計な数を表示させないように工夫する必要があります。
import random
a=random.uniform(0.1,0.9)
print(round(a, 1)) # 小数点第二位を四捨五入
print(round(a, 2)) # 小数点第三位を四捨五入
print(round(a, 3)) # 小数点第四位を四捨五入
#出力結果
#0.9
#0.86
#0.865
上のコードでは0.1から0.9の範囲の数を指定し、roundを使って四捨五入しています。
この方法で任意の小数を自由に作り、問題に組み込むことが可能になります。
import random
a=random.uniform(0.1,0.9)
b=random.uniform(0.1,0.9)
c="+"
print(round(a, 2),c,round(b, 2))
#出力結果→ 0.61 + 0.85
分数を作る
中学数学では整数や小数だけでなく、分数を扱った問題もよく出題されます。
Pythonで分数の問題を解く際には1/2のように表記しましたが、
テスト問題ではこのように表記するわけにはいきません。
そこでMarkdownを用いて表記します。
Markdownで分数を書くには、
\frac{1}{2} のように書き、$$で囲みます。
実際に書いてMarkdownで表示させると、
$$
\frac{1}{2}
$$
のように分数がきれいに表示されます。
PythonでMarkdown式分数を書くには?
数字の部分はPythonの変数で表すことができそうです。
ただし、このままPythonで書くわけにはいきません。
数字や記号、そしてfracの部分もそれぞれ文字列に変換する必要があります。
さっそくコードを書いてみましょう。
import random
a=random.randint(1,9)
b=random.randint(1,9)
c="\\frac" #「\」を文字列に変換するには「\\」と書く
d="{"
e="}"
f="-"
print(c,d,a,e,d,b,e)
#出力結果
#\frac { 3 } { 5 }
このままMarkdown対応のエディタに貼り付けると、分数で表記されます。
$$
\frac{3}{5}
$$
\fracの前にマイナスを付けたすと、このように表示されます。
$$
-\frac { 3 } { 5 }
$$
最後に
今回は中学数学の問題を作成するための基本を紹介しました。
次回は実際に中学数学の単元に沿って問題を作成していきたいと思います。
この記事の続き
この記事の続きはこちら。
関連記事