直接采取代码中以字典形式放入题库内容。
共6种题型。从题库中随机选取部分题目组成一张试卷,以当前日期命名,生成某试卷.doc和某答案.doc。输出为两个Word文档。
'''
Author: liuhui
data: 2024/11/22 10:46
desc:
填空、判断、单选、多选、问答、专项,6种题型生成一套试卷。
'''
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
# 填空题库,共48题
dict_tiankong = {1:('填空内容表述________,填空内容表述,________________填空内容表述。',2,'答案1|答案2'),
2:('填空内容表述________________填空内容表述。',1,'答案1'),
3:('填空内容表述________________填空内容表述________________填空内容表述。',2,'答案1|答案2')}
# 判断题库,共50题
dict_panduan = {1:('内容表述。( )','√'),
2:('内容表述。( )','x'),
3:('内容表述。( )','x')}
# 单选题库,共35题
dict_danxuan = {1:('''内容表述( )内容表述。
A .内容表述
B .内容表述
C .内容表述''','C'),
2:('''内容表述( )内容表述。
A .内容表述
B .内容表述
C .内容表述''','C'),
3:('''内容表述( )。
A .内容表述
B . 内容表述
C .内容表述''','C')}
# 多选题库,共15题
dict_duoxuan = {1:('''内容表述( )内容表述。
A.内容表述 B.内容表述
C.内容表述 D.内容表述''','ABCD'),
2:('''内容表述( )内容表述。
A.内容表述 C.内容表述
B.内容表述 D.内容表述''','ABC'),
3:('''内容表述( )。
A.内容表述 B.内容表述
C.内容表述 D.内容表述''','ABD')
str_answer_wenda1 = '''问答题内容表述'''
str_answer_wenda2 = '''问答题内容表述'''
# 问答题库,共8题
dict_wenda = {1:('内容表述',str_answer_wenda1),
2:('内容表述',str_answer_wenda2)}
# 专项题库,共10题
dict_zhuanxiang = {1:('内容表述________,内容表述________。',2,'答案 答案,答案'),
2:('内容表述________________内容表述____________,内容表述___________。',3,'答案 答案 答案'),
3:('内容表述,____________________________________内容表述。',1,'答案')}
import random
from docx import Document
from docx.shared import Pt
import datetime
# 获取当前日期和时间
now = datetime.datetime.now()
# 获取年份、月份和日期
year = now.year
month = now.month
day = now.day
str_datetime = str(year) + '年' + str(month) + '月' + str(day) + '日'
# 创建一个新的Word文档
doctest = Document()
paragraph_title = doctest.add_paragraph()
paragraph_title.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
print('知识测试\n')
run1 = paragraph_title.add_run(str_datetime + '知识测试\n')
font = run1.font
font.size = Pt(20)
font.bold = True
paragraph_detail = doctest.add_paragraph()
paragraph_detail.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
run1 = paragraph_detail.add_run('填空15题,判断15题,单选10题,多选5题,问答2题,专项4题,共51题,100分。\n')
font = run1.font
font.size = Pt(10)
# 添加一个段落
paragraph_test = doctest.add_paragraph()
print('一、填空题(共15题,每题2分,共30分)\n')
run1 = paragraph_test.add_run('一、填空题(共15题,每题2分,共30分)\n')
font = run1.font
font.size = Pt(15)
font.bold = True
wordstr1 = wordstr2 = wordstr3 = wordstr4 = wordstr5 = wordstr6 = ''
numbers_tiankong = [x for x in range(1,49)]
sampled_numbers_tiankong = random.sample(numbers_tiankong, 15)
for index,value in enumerate(sampled_numbers_tiankong):
print(index + 1,'、',dict_tiankong[value][0])
print('\n')
wordstr1 += str(index + 1) + '、' + dict_tiankong[value][0] + ' \n\n'
wordstr1 += '\n\n'
run2 = paragraph_test.add_run(wordstr1)
print('二、判断题(共15题,每题1分,共15分)\n')
run1 = paragraph_test.add_run('二、判断题(共15题,每题1分,共15分)\n')
font = run1.font
font.size = Pt(15)
font.bold = True
numbers_panduan = [x for x in range(1,51)]
sampled_numbers_panduan = random.sample(numbers_panduan, 15)
for index,value in enumerate(sampled_numbers_panduan):
print(index + 1,'、',dict_panduan[value][0])
print('\n')
wordstr2 += str(index + 1) + '、' + dict_panduan[value][0] + ' \n\n'
wordstr2 += '\n\n'
run2 = paragraph_test.add_run(wordstr2)
print('三、单选题(共10题,每题2分,共20分)\n')
run1 = paragraph_test.add_run('三、单选题(共10题,每题2分,共20分)\n')
font = run1.font
font.size = Pt(15)
font.bold = True
numbers_danxuan = [x for x in range(1,36)]
sampled_numbers_danxuan = random.sample(numbers_danxuan, 10)
for index,value in enumerate(sampled_numbers_danxuan):
print(index + 1,'、',dict_danxuan[value][0])
print('\n')
wordstr3 += str(index + 1) + '、' + dict_danxuan[value][0] + ' \n\n'
wordstr3 += '\n\n'
run2 = paragraph_test.add_run(wordstr3)
print('四、多选题(共5题,每题3分,共15分)\n')
run1 = paragraph_test.add_run('四、多选题(共5题,每题3分,共15分)\n')
font = run1.font
font.size = Pt(15)
font.bold = True
numbers_duoxuan = [x for x in range(1,16)]
sampled_numbers_duoxuan = random.sample(numbers_duoxuan, 5)
for index,value in enumerate(sampled_numbers_duoxuan):
print(index + 1,'、',dict_duoxuan[value][0])
print('\n')
wordstr4 += str(index + 1) + '、' + dict_duoxuan[value][0] + ' \n\n'
wordstr4 += '\n\n'
run2 = paragraph_test.add_run(wordstr4)
print('五、问答题(共2题,每题6分,共12分)\n')
run1 = paragraph_test.add_run('五、问答题(共2题,每题6分,共12分)\n')
font = run1.font
font.size = Pt(15)
font.bold = True
numbers_wenda = [x for x in range(1,9)]
sampled_numbers_wenda = random.sample(numbers_wenda, 2)
for index,value in enumerate(sampled_numbers_wenda):
print(index + 1,'、',dict_wenda[value][0])
print('\n'*10)
wordstr5 += str(index + 1) + '、' + dict_wenda[value][0] + ' ' + '\n'*20
wordstr5 += '\n\n'
run2 = paragraph_test.add_run(wordstr5)
print('六、专项题(共4题,每题2分,共8分)\n')
run1 = paragraph_test.add_run('六、专项题(共4题,每题2分,共8分)\n')
font = run1.font
font.size = Pt(15)
font.bold = True
numbers_zhuanxiang = [x for x in range(1,11)]
sampled_numbers_zhuanxiang = random.sample(numbers_zhuanxiang, 4)
for index,value in enumerate(sampled_numbers_zhuanxiang):
print(index + 1,'、',dict_zhuanxiang[value][0])
print('\n')
wordstr6 += str(index + 1) + '、' + dict_zhuanxiang[value][0] + ' \n\n'
wordstr6 += '\n\n'
run2 = paragraph_test.add_run(wordstr6)
# 保存文档
doctest.save(str_datetime + '知识测试试卷.docx')
# 输出答案
# 创建一个新的Word文档
doc = Document()
# 添加一个段落
paragraph = doc.add_paragraph()
print('答案:\n')
print('【填空】:\n')
run1 = paragraph.add_run('答案:\n''【填空】:\n')
# 设置字体大小为12磅
font = run1.font
font.size = Pt(15)
wordstr1 = wordstr2 = wordstr3 = wordstr4 = wordstr5 = wordstr6 = ''
for index,value in enumerate(sampled_numbers_tiankong):
print(index + 1,'、',dict_tiankong[value][2], end = ' ')
wordstr1 += str(index + 1) + '、' + dict_tiankong[value][2] + ' '
print('\n')
wordstr1 += '\n\n'
run2 = paragraph.add_run(wordstr1)
print('【判断】:\n')
run1 = paragraph.add_run('【判断】:\n')
font = run1.font
font.size = Pt(15)
for index,value in enumerate(sampled_numbers_panduan):
print(index + 1,'、',dict_panduan[value][1], end = ' ')
wordstr2 += str(index + 1) + '、' + dict_panduan[value][1] + ' '
print('\n')
wordstr2 += '\n\n'
run2 = paragraph.add_run(wordstr2)
print('【单选】:\n')
run1 = paragraph.add_run('【单选】:\n')
font = run1.font
font.size = Pt(15)
for index,value in enumerate(sampled_numbers_danxuan):
print(index + 1,'、',dict_danxuan[value][1], end = ' ')
wordstr3 += str(index + 1) + '、' + dict_danxuan[value][1] + ' '
print('\n')
wordstr3 += '\n\n'
run2 = paragraph.add_run(wordstr3)
print('【多选】:\n')
run1 = paragraph.add_run('【多选】:\n')
font = run1.font
font.size = Pt(15)
for index,value in enumerate(sampled_numbers_duoxuan):
print(index + 1,'、',dict_duoxuan[value][1], end = ' ')
wordstr4 += str(index + 1) + '、' + dict_duoxuan[value][1] + ' '
print('\n')
wordstr4 += '\n\n'
run2 = paragraph.add_run(wordstr4)
print('【问答】:\n')
run1 = paragraph.add_run('【问答】:\n')
font = run1.font
font.size = Pt(15)
for index,value in enumerate(sampled_numbers_wenda):
print(index + 1,'、',dict_wenda[value][1], end = ' ')
wordstr5 += str(index + 1) + '、' + dict_wenda[value][1] + ' \n\n'
print('\n')
wordstr5 += '\n\n'
run2 = paragraph.add_run(wordstr5)
print('【专项】:\n')
run1 = paragraph.add_run('【专项】:\n')
for index,value in enumerate(sampled_numbers_zhuanxiang):
print(index + 1,'、',dict_zhuanxiang[value][2], end = ' ')
wordstr6 += str(index + 1) + '、' + dict_zhuanxiang[value][2] + ' '
print('\n')
wordstr6 += '\n\n'
run2 = paragraph.add_run(wordstr6)
# 设置字体大小为12磅
font = run1.font
font.size = Pt(15)
# 保存文档
doc.save(str_datetime + '知识测试答案.docx')