今回はテキストファイルを利用して、一桁自然数の二項演算の計算ドリルを作っていきます。環境はanaconda。書いたコードは以下の通りです。
##コードと出力結果
import random
with open("keisan.txt","w") as f:
answer = []
for cnt in range(10):
num1 = random.randint(1,9)
num2 = random.randint(1,9)
question = str(num1) + " + " + str(num2) + " = "
answer.append(num1+num2)
f.write(question+"\n")
f.write("\nA. ")
for ans in answer:
f.write(str(ans) + " ")
5 + 1 =
5 + 2 =
3 + 3 =
2 + 6 =
1 + 5 =
4 + 8 =
6 + 1 =
8 + 4 =
6 + 7 =
6 + 4 =
A. 6 7 6 8 6 12 7 12 13 10
##フロー
プログラムのフローを説明してきます。
with open("keisan.txt","w") as f:
まず、最初に一桁の自然数を取得するためにrandomモジュールをインポートします。そして、テキストファイルに出力するためにwithステートメントを使い、ファイル名を"keisan.txt"として、書き込みモードにして開きます。
answer = []
for cnt in range(10):
num1 = random.randint(1,9)
num2 = random.randint(1,9)
question = str(num1) + " + " + str(num2) + " = "
answer.append(num1+num2)
f.write(question+"\n")
f.write("\nA. ")
ここでは実際の足し算を書き込んでいます。答えの出力もするので、リストを用意します。randomモジュールの整数を生成するrandint関数を使い、1~9の自然数を生成しています。questionには問題文を格納するのですが、演算子を使うと勝手に計算されてしまいますので文字列に変換して格納しています。答えの方はappendメソッドを使い、リストに加えていきます。そして、questionに格納された計算式をwriteメソッドで書き込んでいます。見やすいように改行しつつ出力します。
for ans in answer:
f.write(str(ans) + " ")
最後に、answerに格納された答えのリストをfor文で順番に出力していきます。
##振り返り
過去にC言語を使った、テキストファイルの書き読み込みをしたことがありますが、pythonだとwith文を使うことでファイルのクローズを意識しなくなるのでとても楽ですね。
このコードは足し算の二項演算だけなので、今後はもっとこの計算ドリルを演算を自由に選べたり桁数を指定したりと機能を拡張していきたいと思います。なにかご意見、質問などありましたら気軽にコメントして下さい。