你是否曾经需要为学生创建大量的试卷,但又不想手动编写每一份试卷?在这个教程中,我们将使用Python编写一个自动化试卷生成工具,可以根据题库随机生成试卷,并保存为Word文档。无需编程经验,我们将一步步引导你完成整个过程。
开场故事
假设你是一名教师,每学期都需要为你的学生创建多份试卷。但是,手动编写每一份试卷非常耗时且容易出错。你希望有一种自动化工具,可以根据题库随机生成试卷,以节省时间并降低错误率。现在,让我向你介绍如何使用Python创建这样一个自动化试卷生成工具。
准备工作
在开始之前,确保你的计算机上已经安装了以下工具和库:
-
Python:确保你已经安装了Python。如果没有,你可以从Python官方网站下载并安装。
-
OpenPyXL:OpenPyXL是一个用于操作Excel文件的Python库。你可以使用以下命令安装它:
pip install openpyxl
创建自动化试卷生成工具
现在,让我们开始创建自动化试卷生成工具。
导入必要的库
首先,我们需要导入必要的Python库和模块。这些库包括random
(用于生成随机数)和openpyxl
(用于操作Excel文件)。
import random
from openpyxl import load_workbook
创建随机数生成函数
我们将创建一个函数,用于生成不重复的随机整数。这个函数将接受两个参数,分别是最大数和需要生成的随机数的个数。
def Random_num(num_max, num_qty):
num_list = []
while len(num_list) < num_qty:
num = random.randint(2, num_max)
if num in num_list:
continue
else:
num_list.append(num)
return num_list
创建题目抽取函数
接下来,我们将创建一个函数,用于根据随机生成的题目编号从题库中抽取题目。这个函数将接受两个参数,分别是试题类型和需要抽取的试题编号。
def Question(que_type, numbers):
questions = []
wb = load_workbook("题库.xlsx")
ws = wb[que_type]
for i in numbers:
question = ws["B" + str(i)].value
if que_type == "多选题" and ws["G" + str(i)].value:
answerE = "E:\t" + str(ws["G" + str(i)].value)
single_question = [question, answerE]
else:
single_question = [question]
questions.append(single_question)
return questions
创建试卷生成函数
现在,我们将创建一个函数,用于将抽取的试题写入Word文档中。
from docx import Document
from docx.shared import Pt
from docx.oxml.ns import qn
def To_word(number, questions_data):
doc = Document("试题-模板.docx")
title1 = "一、单项选择题(共40题,每题1分)"
p = doc.add_paragraph()
r = p.add_run(title1)
r.bold = True
r.font.size = Pt(12)
for index, i in enumerate(questions_data["单选题"], start=1):
doc.add_paragraph(f"{index}. {i[0]}")
title2 = "二、多项选择题(共20题,每题2分)"
p = doc.add_paragraph()
r = p.add_run(title2)
r.bold = True
r.font.size = Pt(12)
for index, i in enumerate(questions_data["多选题"], start=1):
doc.add_paragraph(f"{index}. {i[0]}")
if len(i) == 2: # 判断是否有E选项
doc.add_paragraph(f"{i[1]}")
title3 = "三、判断题(共10题,每题1分)"
p = doc.add_paragraph()
r = p.add_run(title3)
r.bold = True
r.font.size = Pt(12)
for index, i in enumerate(questions_data["判断题"], start=1):
doc.add_paragraph(f"{index}. {i[0]}")
title4 = "四、填空题(共10题,每题1分)"
p = doc.add_paragraph()
r = p.add_run(title4)
r.bold = True
r.font.size = Pt(12)
for index, i in enumerate(questions_data["填空题"], start=1):
doc.add_paragraph(f"{index}. {i[0]}")
doc.save(f"试卷及答案\\考试题{number}.docx")
创建答案生成函数
接下来,我们将创建一个函数,用于生成试题答案,并将答案写入Word文档中。
def Answer(number, questions_data):
doc = Document()
title = "计算机系2020第二学期期末考试题(答案)"
p = doc.add_paragraph()
r = p.add_run(title)
r.bold = True
r.font.size = Pt(20)
title1 = "一、单项选择题答案(共40题,每题1分)"
p = doc.add_paragraph()
r = p.add_run(title1)
r.bold = True
r.font.size = Pt(12)
p = doc.add_paragraph()
for index, i in enumerate(questions_data["单选题"], start=1):
p.add_run(f"{index}. {i[0]} {i[1]}\t")
if index % 10 == 0:
p = doc.add_paragraph()
title2 = "二、多项选择题答案(
共20题,每题2分)"
p = doc.add_paragraph()
r = p.add_run(title2)
r.bold = True
r.font.size = Pt(12)
p = doc.add_paragraph()
for index, i in enumerate(questions_data["多选题"], start=1):
p.add_run(f"{index}. {i[0]} {i[1]}\t")
if index % 3 == 0:
p = doc.add_paragraph()
title3 = "三、判断题答案(共10题,每题1分)"
p = doc.add_paragraph()
r = p.add_run(title3)
r.bold = True
r.font.size = Pt(12)
p = doc.add_paragraph()
for index, i in enumerate(questions_data["判断题"], start=1):
p.add_run(f"{index}. {i[0]} {i[1]}\t")
if index % 5 == 0:
p = doc.add_paragraph()
title4 = "四、填空题答案(共10题,每题1分)"
p = doc.add_paragraph()
r = p.add_run(title4)
r.bold = True
r.font.size = Pt(12)
p = doc.add_paragraph()
for index, i in enumerate(questions_data["填空题"], start=1):
p.add_run(f"{index}. {i[0]} {i[1]}\t\t")
if index % 2 == 0:
p = doc.add_paragraph()
doc.save(f"试卷及答案\\考试题{number}答案.docx")
主函数
最后,我们创建了主函数来运行整个试卷生成过程。
if __name__ == '__main__':
for number in range(1, 21): # 生成20套试卷
num_single_choice = Random_num(566, 40)
num_mult_choice = Random_num(196, 20)
num_judgment = Random_num(418, 10)
num_completion = Random_num(190, 10)
question_num = {
"单选题号": num_single_choice,
"多选题号": num_mult_choice,
"判断题号": num_judgment,
"填空题号": num_completion
}
questions_data = {
"单选题": Question("单选题", question_num["单选题号"]),
"多选题": Question("多选题", question_num["多选题号"]),
"判断题": Question("判断题", question_num["判断题号"]),
"填空题": Question("填空题", question_num["填空题号"])
}
To_word(number, questions_data)
Answer(number, questions_data)
print(f"试卷{number}及答案生成完成!")
运行试卷生成工具
现在,你已经创建了一个自动化试卷生成工具,可以根据题库随机生成试卷,并将试卷和答案保存为Word文档。要运行工具,只需运行上述代码。生成的试卷和答案将保存在指定的文件夹中。
总结
通过本教程,你学会了如何使用Python和OpenPyXL创建一个自动化试卷生成工具。这个工具可以大大节省教师编写试卷的时间,同时降低了人为错误的风险。你可以根据自己的需求进一步扩展这个工具,添加更多功能,如生成不同类型的试题或自定义试题模板。
希望这个教程对你有所帮助,让你更轻松地处理大量试卷生成工作!