|
#从tex文件的试题库中自动选择组成tex格式的试题,建议题库的量要远大于要选的量
#2021年12月10日,只测试了有4个题型的情况
#试题库中的每个小题要在一行,不管该小题多长,tex中会自动换行,但行号不变。
import random
import time
start_time=time.time()
def examchoice(ftex,N,lh,le):#N选择个数.lh,le题目所有范围,选择该题型的
num_series=range(lh,le)
num=random.sample(num_series,N)
result=""
headtxt="\\begin{enumerate}\n"
for i in num:
result+=ftex[i]
endtxt="\\end{enumerate}"
result=headtxt+result+endtxt
return result
ftex=open("E:\\工作\\试题\\试题\\TEX试题库\\试题库.tex","r").readlines()
fhead=open("E:\\工作\\试题\\试题\\TEX试题库\\试题标准.tex","r").readlines()
fout=open("E:\\工作\\试题\\试题\\TEX试题库\\test\\test.tex","w")
texhead="" #试题的头
for i in range(19):
texhead+=fhead[i]
texend="\n"+fhead[19]#试题的尾
lh,le,ti_type,ti_num="","","",0
for i in range(len(ftex)):
if "section" in ftex[i]:
ti_type+=ftex[i][9:-2]+","
lh+=str(i+2)+","
ti_num+=1
if "end{enumerate}" in ftex[i]:
le+=str(i-1)+","
lh,le=list(eval(lh)),list(eval(le))#得到每个题型在题库中的开始与结束行号
ti=ti_type.split(",")#把列表通过逗号分成序列
fout.writelines(texhead)
print("本题库共有{}种题型:".format(ti_num))
result,t_num,gs="",[],0
for i in range(len(ti)-1):
print("{}.{}{}个".format(i+1,ti[i],le[i]-lh[i]+1))
xuan=eval(input("选择该题型请按1,不选请按其他数字:"))
if xuan==1:
timu_num=eval(input("请输入该题型的个数:"))
t_num.append(timu_num)
result=examchoice(ftex,timu_num,lh[i],le[i])
fout.writelines("\n"+"\section{"+ti[i]+"}\n")
fout.writelines(result)
gs+=1 #选择的题型个数
else:
continue
fout.writelines(texend)
fout.close()
for i in range(gs):
print("本次共生成{}个{}".format(t_num[i],ti[i]))
end_time=time.time()
print("本次选题共历时{:.2f}秒".format(end_time-start_time))
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-11-22 23:04
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社