概要
退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング
を読んだので、教師の方や親御さん、はたまた自分でテストを作って勉強したい方向けに小テストを作るためのフォーマットを
Pythonで作ってみました。
特に教師の方は仕組みさえ分かれば様々なテスト作りに応用が効くので、ぜひ一読頂いて試して頂ければ幸いです。
こちらにコードを置いています。気になる方はどうぞ。
参考書籍
退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング
個人的名著です。今回の記事の内容以外にも様々な雑用から解放されるような内容がたくさん載っているので、興味ある方は読んでみてください。
環境
MacOS Mojave 10.14
Python 3.7.3
コード
# !python3
# coding: UTF-8
# randomQuiz.py -ランダムに問題と答えを並べて問題集と解答集を作る
# 問題と選択肢をシャッフルするためにrandomモジュールをインポート。
import random
# 問のデータ。キー(問題部分)と値(答え)を自身で入れ替えることで様々な問題に対応可能
wordQuiz = {'意気':'投合','自業':'自特','天変':'地異','泰然':'自若','魑魅':'魍魎','百花':'繚乱','一挙':'両得','内憂':'外患','破顔':'一笑','右往':'左往','神出':'鬼没','和洋':'折衷','電光':'石火','朝三':'暮四','竜頭':'蛇尾','徹頭':'徹尾'}
# 35通りの問題を作成。range()の中の数字を任意の数字に変えることで何パターン分作るかを決められる。
for quiz_num in range(35):
#問題集と解答集のファイル作成
quiz_file = open('randomQuiz{}.txt'.format(quiz_num + 1),'w')
answer_key_file = open('randomQuiz_answers{}.txt'.format(quiz_num + 1),'w')
#問題集のヘッダー(名前の記入欄などのスペース)を書く
quiz_file.write('名前:\n\n日付:\n\n学期:\n\n')
quiz_file.write((' ' * 28) + '四字熟語クイズ(問題番号{})'.format(quiz_num + 1))
quiz_file.write('\n\n')
#言葉の順番をシャッフルする
Questions = list(wordQuiz.keys())
random.shuffle(Questions)
# 問題をループしてそれぞれの問題を作成する
for question_num in range(len(Questions)):
#正解と誤答を取得する
correct_answer = wordQuiz[Questions[question_num]]
wrong_answers = list(wordQuiz.values())
del wrong_answers[wrong_answers.index(correct_answer)]
wrong_answers = random.sample(wrong_answers,3)
answer_options = wrong_answers + [correct_answer]
random.shuffle(answer_options)
#問題文と回答選択肢を問題ファイルに書く
quiz_file.write('{}.{}の後に続く正しい語句は次のうちどれ?\n'.format(question_num + 1,Questions[question_num]))
for i in range(4):
quiz_file.write('{}.{}\n'.format('ABCD'[i],answer_options[i]))
quiz_file.write('\n')
#答えの選択肢をファイルに書く
answer_key_file.write('{}.{}\n'.format(question_num + 1,'ABCD'[answer_options.index(correct_answer)]))
# ファイルを閉じる
quiz_file.close()
answer_key_file.close()
解説
上記のプログラムで、登録したキーと値をランダムな順番に並べ、正答と誤答を1:3の割合で選択肢として作ったものが出来上がります。
問題の順番と誤答の選択肢を無差別にシャッフルしてくれるものといえば分かりやすいでしょうか。
こちらのプログラムの素晴らしいところは、キーと値さえ設定してしまえば問題の順番などは考えなくてよく、使い回しが効くフォーマットとして使用できる点です。
今回は四字熟語の例を使っていますが、このプログラムは単純な暗記を試すようなテストから、少し設定を変えれば算数の計算問題作成などにも使えます。
今回の例では、for quiz_num in range(35):の括弧の中が35なので35通りの問題と解答が作成されることになります。
以下の画像が実際にプログラムを実行した際の完成品となります。
このような形式のテストがプログラムを実行した時に35通り分、実行したプログラムと同じフォルダ内に作成されます。
あとがき
一人でも多くの方に雑用を楽にこなして欲しかったのと、個人的に名著だと思っている本の内容に触れている記事がほとんど無かったので記事を書きました。
この記事が少しでも多くの方の助けになればと思います、是非活用してみてください。