徐伟
基于Python的数学专业题库(tex版)选择系统
2021-12-10 15:59
阅读:2383

#从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))


转载本文请联系原作者获取授权,同时请注明本文来自徐伟科学网博客。

链接地址:https://wap.sciencenet.cn/blog-216525-1316022.html?mobile=1

收藏

分享到:

当前推荐数:0
推荐到博客首页
网友评论0 条评论
确定删除指定的回复吗?
确定删除本博文吗?