python建立题库随机抽题_利用python——从题库得到得到随机试卷

本文介绍了如何使用Python从题库中随机抽取试题,详细讲解了编码问题、正则表达式匹配、题目分配算法以及出题随机算法。通过读取txt文档,处理中文编码,利用正则找出题目,再根据权重动态分配题目,实现随机试卷生成。最后,文章还讨论了后续可能的改进方向,包括题目分类和机器学习应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码思路:

1、读取 txt 文档,文件基本操作

2、遇到了 编码问题

这里用到了Unidode强制编码函数,将其转化为‘utf_8_sig’格式,经过实践证明可以。

这里说一下编码问题,Python2默认编码方式是ANSII码,遇到中文编码问题,网上解决方法如下:

(1) sys 设置 defaultencode,经过测试 python2.7版本不能用,python3.5可用

(2) 即下面代码的方法,强制编码,txt文件可在sublim/notebook转化为utf8编码的方式。

lis = unicode(lis, encoding='utf_8_sig' )

lis.encode('utf-8')

3.接下来,查找题目。

为了出题随机,我们随机提取的行数如下,其中line_start[i]为该部分最开始的行数

p=random.randint(1,50)+line_start[i]

我们暂定为 往下 15行为文本提取的内容。(为什么是15行呢, 因为最长的题目不超过15行)

这里用到了正则表达式,题目的起始符号为 “ 数字+、”。

正则表达式,这里又遇到一个坑,这个坑是什么呢?大家可以试一试,中文的标点符号正则表达匹配不出来

原因是先要把待匹配的转化为utf8字符,再进行匹配,这里”、”这个符号的UTF8编码是u3001,具体代码如下:

这里 ww.S 即 re.S , 因为 我 import re as ww, 至于为什么这样,因为遇到了我也不知道的bug,说 re 不行,那就as W喽。

lis = unicode(lis, encoding='utf_8_sig' )

lis.encode('utf-8')

lis=ww.findall(u"(\d+[\u3001].*?)\d+[\u3001]",lis,ww.S)

这样我们就得到了提取到的题目

4、题目分配算法

接下来,题目有很多部分,那么怎么划分呢?

按照权重来喽,为了确保

5、出题随机算法

为了确保题目覆盖范围,足够随机,可调整。

line_end是 该部分结束的行数,p是当前行数,counts 是总题目数,time_i是当前的题目数

这里的算法思路是,整体均衡,动态调整 。

p为行数,是决定当前题目的。为了随机,我们让p+随机数。

imp=get_imp(line_end[i],p,counts[i],time_i)

p=p+imp

为了均衡, imp 数学期望确保 = 总行数/题目数

那么如何动态调

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值