首页/文章/ 详情

一个考试随机出题系统的原型

2年前浏览777

1. 引言

伴随着网上课程的结束,接下来的问题是如何进行网上考试。显然,一套固定题目的试卷在目前环境下发放给学生是行不通的。于是许多老师想到了随机出题。作为一个试验原型,这个笔记给出了一个非常简单的随机出题思路,能使得每位学生得到的题目尽可能不一样。


2. 随机出题的类型

Fixed随机出题是在一个题库内随机抽出一定数量的题目,这样每个学生分配到题目就会不一样,随着题库中题目数量的增加,每个人得到相同题目的概率会逐渐减小, 这种系统的原理和设计都很简单。


Adapative随机出题是一种高级的随机出题方法,采用自适应算法设计题目的呈现,在一些心理测试中经常使用,例如FBI,CIA以及一些大公司高级雇员的应聘就经常使用这种算法对应试者进行心理测试。简单地来说,自适应算法是根据考生上一道答题的正确程度来给出下一道题目,如果答对了下一个题目的难度增加,如果答错了,下一道题目的难度会减小。自适应考试也应用在一些标准化英语考试中,比如出国研究生入学考试GRE和GMAT考试就使用了自适应考试算法。GMAT是从一个概率分布中随机抽取题目, 它的概率分布表达式就是那个每年更新的percentile。(顺便说一下,GMAT系统的核心部分是用R语言写的,R是一个非常优秀的统计包,现在用Windows下也可以使用R了,而且Python也可以直接调用R包。) 显然这种自适应算法对我们普通考试来说太复杂了,因此我们使用Fixed随机出题方法


3. 试卷生成方法

Fixed随机出题方法原理很简单,拟定一个题库,从中选取一定数量就可以了。题库的设计,即题库中的题目以哪种型式储存是首先要考虑的问题,技术上来说使用任何一种数据库系统都可以实现,比如用MySQL或SQLite等数据库,不过我们可以用JSON格式来储存,JSON有许多优点, 在此就不介绍了。接下来的问题是如何编写JSON文件,我们可以使用文本编辑器来写,也可以借助一些外部的工具库来生成。这里我使用tinydb包来生成JSON数据库。

在这个简单的原型系统中,我只使用了两个主要模块,一个是tinydb, 为了产生JSON格式的数据库,另一个使用了random模块, 为了产生随机题库。然后使用db.insert来增加题目。


随机抽取题目使用了下面的代码,在这段代码中,我们从题库中随机选取5道题目作为一个考试试卷。



    random.shuffle(list(db.all()))    result=random.sample(list(db.all()),5)

在大多数情况下,我更喜欢使用itertools模块中的组合算法,这两种方法在大规模的数据中我没有测试过,在小规模数据中得出的结果差不多。



    #import itertools    #comb = list(itertools.combinations(result, 1))

最后,生成的题目保存在一个文件中

4. 系统测试

代码每运行一次,就会生成一个不同的文件。



如果把考生的名单输入进来,使用一个循环语句,便可以瞬间为每个学生生成一份unique的试卷,要多少份有多少份


5. 结束语

作为一个“玩具”设计,本文给出了一个考试系统随机出题的原型,题库使用JSON格式设计,然后从中随机抽取。在目前阶段,特别适应于那些只有文字描述的考试题目。如果要继续完善这个原型,必须考虑做以下这些工作:(1) 目前JSON中只包含文字,没有包含图片,应该在题库中增加读取图片的功能。(2) 目前题库中选择题的选择项(A) (B) (C) (D) (E) 输出后没有分行显示,应该分行显示。数学公式的显示应该不是问题,我们使用LaTex可以实现,前面有个笔记曾经介绍过如何在Python中使用LaTex。



来源:计算岩土力学
科普代码&命令试验python
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2022-09-27
最近编辑:2年前
计算岩土力学
传播岩土工程教育理念、工程分析...
获赞 147粉丝 1060文章 1782课程 0
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈