Pythonで正負の数 (加法)の問題を自動作成する方法を紹介します。
※問題だけ欲しい人は、GitHubのWikiにあるサンプル問題をご覧ください。
準備
あらかじめ、問題作成のための基本をおさえておいてください。こちらのページにまとめてあります。
加法 (一桁)の問題を作成する
まずは最も基本的な 加法(一桁) の式を作ってみましょう。
中学1年の数学で扱われるのは次のような問題です。
(+2)+(+7)
(+4)+(+3)
(-2)+(-4)
(-5)+(-8)
これを、前回までの基本をふまえてコードを書くとこのようになります。
※以下、Pythonのコードになります。
import random
a=random.randint(0,9)
b=random.randint(0,9)
o=random.randint(0,9)
p=random.randint(0,9)
q=random.randint(0,9)
r=random.randint(0,9)
s=random.randint(0,9)
t=random.randint(0,9)
c="+"
d="-"
e="("
f=")"
print(e,c,str(a),f,"+",e,c,str(b),f)
print(e,d,str(o),f,"+",e,d,str(p),f)
print(e,c,str(q),f,"+",e,d,str(r),f)
print(e,d,str(s),f,"+",e,c,str(t),f)
#出力結果
#( + 2 ) + ( + 1 )
#( - 5 ) + ( - 1 )
#( + 1 ) + ( - 6 )
#( - 2 ) + ( + 7 )
さらに「実行」すると、新しい問題(4題)が出力されます。
自分で数を考える必要がないので非常にラクです。
加法 (二桁)の問題を作る
今度は二桁の数を使ってコードを書いてみましょう。
二桁にするには、random.randintの引数の値を「9」から「99」変えるだけです。
import random
a=random.randint(0,99)
b=random.randint(0,99)
o=random.randint(0,99)
p=random.randint(0,99)
q=random.randint(0,99)
r=random.randint(0,99)
s=random.randint(0,99)
t=random.randint(0,99)
c="+"
d="-"
e="("
f=")"
print(e,c,str(a),f,"+",e,c,str(b),f)
print(e,d,str(o),f,"+",e,d,str(p),f)
print(e,c,str(q),f,"+",e,d,str(r),f)
print(e,d,str(s),f,"+",e,c,str(t),f)
#出力結果
#( + 84 ) + ( + 71 )
#( - 9 ) + ( - 43 )
#( + 14 ) + ( - 36 )
#( - 65 ) + ( + 13 )
このようにコードを実行するだけで好きなだけ問題が自動作成されます。
加法(小数)の問題を作る
今度は小数を使ったコードを書いてみましょう。
小数を扱うには、roundを使い、小数点の位置を調整する必要がありました。
import random
a=random.uniform(0.1,9.9)
b=random.uniform(0.1,9.9)
o=random.uniform(0.1,9.9)
p=random.uniform(0.1,9.9)
q=random.uniform(0.1,9.9)
r=random.uniform(0.1,9.9)
s=random.uniform(0.1,9.9)
t=random.uniform(0.1,9.9)
c="+"
d="-"
e="("
f=")"
print(e,c,round(a, 1),f,"+",e,c,round(b, 1),f)
print(e,d,round(o, 1),f,"+",e,d,round(p, 1),f)
print(e,c,round(q, 1),f,"+",e,d,round(r, 1),f)
print(e,d,round(s, 1),f,"+",e,c,round(t, 1),f)
#出力結果
#( + 0.3 ) + ( + 7.9 )
#( - 2.4 ) + ( - 2.2 )
#( + 9.8 ) + ( - 0.2 )
#( - 6.8 ) + ( + 6.3 )
今回は小数の範囲を「0.1」から「9.9」の範囲に限定していますが、uniformの引数を変えることで変更は可能です。
また、round(a, 1)の「1」の部分を「2」や「3」に変えることで小数の範囲を変更することが可能です。
加法(分数)の問題を作る
今度は分数を使った問題を作ってみましょう。
まずは2つの分数を作ります。
import random
a=random.randint(1,9)
b=random.randint(1,9)
c=random.randint(1,9)
d=random.randint(1,9)
e="{"
f="}"
h="\\frac"
i="-\\frac"
print(h,e,a,f,e,b,f)
print(i,e,c,f,e,d,f)
#出力結果
#\frac { 3 } { 2 }
#-\frac { 1 } { 9 }
$$
\frac { 3 } { 2 }
$$
$$
-\frac { 1 } { 9 }
$$
この2つの分数を組み合わせて問題を作っていきます。
import random
a=random.randint(1,9)
b=random.randint(1,9)
c=random.randint(1,9)
d=random.randint(1,9)
e="{"
f="}"
h="\\frac"
i="-\\frac"
o="+"
print(o,h,e,a,f,e,b,f,o,h,e,c,f,e,d,f)
print(o,h,e,a,f,e,b,f,i,e,c,f,e,d,f)
print(h,e,a,f,e,b,f,o,i,e,c,f,e,d,f)
print(i,e,a,f,e,b,f,o,i,e,c,f,e,d,f)
#出力結果
#+ \frac { 9 } { 8 } + \frac { 8 } { 7 }
#+ \frac { 9 } { 8 } -\frac { 8 } { 7 }
#\frac { 9 } { 8 } + -\frac { 8 } { 7 }
#-\frac { 9 } { 8 } + -\frac { 8 } { 7 }
$$
+\frac { 9 } { 8 } + \frac { 8 } { 7 }
$$
$$
+\frac { 9 } { 8 } -\frac { 8 } { 7 }
$$
$$
\frac { 9 } { 8 } + -\frac { 8 } { 7 }
$$
$$
-\frac { 9 } { 8 } + -\frac { 8 } { 7 }
$$
後は、変数を増やして数字がかぶらないようにするだけで問題が出来上がります。
import random
a=random.randint(1,9)
b=random.randint(1,9)
c=random.randint(1,9)
d=random.randint(1,9)
g=random.randint(1,9)
j=random.randint(1,9)
k=random.randint(1,9)
z=random.randint(1,9)
p=random.randint(1,9)
q=random.randint(1,9)
r=random.randint(1,9)
s=random.randint(1,9)
t=random.randint(1,9)
u=random.randint(1,9)
v=random.randint(1,9)
w=random.randint(1,9)
e="{"
f="}"
h="\\frac"
i="-\\frac"
o="+"
print(o,h,e,a,f,e,b,f,o,h,e,c,f,e,d,f)
print(o,h,e,g,f,e,z,f,i,e,j,f,e,k,f)
print(h,e,p,f,e,q,f,o,i,e,r,f,e,s,f)
print(i,e,t,f,e,u,f,o,i,e,v,f,e,w,f)
#出力結果
#+ \frac { 3 } { 4 } + \frac { 7 } { 4 }
#+ \frac { 7 } { 9 } -\frac { 8 } { 1 }
#\frac { 2 } { 5 } + -\frac { 5 } { 4 }
#-\frac { 6 } { 9 } + -\frac { 4 } { 8 }
$$
+\frac { 3 } { 4 } + \frac { 7 } { 4 }
$$
$$
+\frac { 7 } { 9 } -\frac { 8 } { 1 }
$$
$$
\frac { 2 } { 5 } + -\frac { 5 } { 4 }
$$
$$
-\frac { 6 } { 9 } + -\frac { 4 } { 8 }
$$
問題のサンプル
GitHubのWikiに作成したサンプル問題を掲載しています。参考にしてください。
最後に
今回はPythonで正負の数「加法」の問題を自動作成する方法を紹介しました。
中学の1年で習う内容をもとに問題を作成しましたが、同じ方法を使えば、入試問題レベルの問題も作成できます。
数や引数の値を変えて自分でいろいろと試してみてください。
次回は正負の数「減法」を取り上げる予定です。
なお、問題の「解答」はPythonで簡単に作成できます。こちらの記事を参考にしてください。
Python で計算する準備 足し算・引き算・掛け算・割り算・分数・累乗 - Qiita https://qiita.com/akiba_burari/items/5bb4c083b30768a33aa1
この記事の続き
この記事の続きはこちら。
関連記事