博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【python实战系列】生成随机的考试试卷(二)
阅读量:2055 次
发布时间:2019-04-28

本文共 2722 字,大约阅读时间需要 9 分钟。

最近我的一个好朋友小杨拿到了她的教师资格证,马上就要成为一名老师了,虽说以前不怎么喜欢老师,但随着长大发现,老师还真是一个很好的职业。假期又多,又受人尊重,而且工作也很稳定。看来以后要叫她杨老师了。

最近在疯狂地为当老师做着准备。最近遇到了一些困惑,就是她不想像以前那样古板,每次都准备很多份一样的卷子,答案和题目都一样,这样就大大提高了学生作弊的可能。所以想制定一份特殊的考卷,让每个学生拿到的题目一样,但问题和答案选项的顺序不一样。

 

可是这个却没有她想的那么简单,每次都要手动打乱n份不同的卷子,这样工作量太大了,而且也没有一份参考答案,如果自己都不知道答案的话怎么办?最近她看我正在学习编程,于是就想问问我有什么好的办法可以解决。

 

虽说我最近在学编程是没错,但这可难倒我了,我也是个小菜鸟啊。

 

既然是朋友嘛,能帮就帮一下吧,于是我大概思考了一下能解决问题的步骤:

  1. 创建n份不同的试卷文件

  2. 为每份试卷创建m个选择题,次序随机

  3. 将试卷写到n个文本文件中

  4. 将答案写到n个文本文件中

 

突然有了思路,我们就做个只有选择题的试卷:选出每个省份的省会城市

接下来我们一起来实现一波

 

1.首先我们建立一个数据字典存储数据

capitals = {    "湖南省": "长沙", "广东省": "广州", "山东省": "济南",    "江苏省": "南京", "河南省": "郑州", "河北省": "石家庄",    "陕西省": "西安", "福建省": "福州", "云南省": "昆明",    "安徽省": "合肥", "海南省": "海口", "湖北省": "武汉",    "山西省": "太原", "辽宁省": "沈阳", "黑龙江省": "哈尔滨",    "贵州省": "贵阳", "甘肃省": "兰州", "青海省": "西宁",    "吉林省": "长春", "浙江省": "杭州", "江西省": "南昌",    "四川省": "成都", "西藏自治区": "拉萨", "广西壮族自治区": "南宁",    "内蒙古自治区": "呼和浩特", "宁夏回族自治区": "银川", "新疆维吾尔自治区": "乌鲁木齐"}

 

2. 创建n个文件,并将内容输出到文件中​​​​​​​

import randompath = "F:\\test\\exam"# 生成40个文件for quizNum in range(40):    # 创建文件和问题的文件    quizFile = open(path + '考试试卷%s.doc' % (quizNum + 1), 'w', encoding='utf-8')    answerKeyFile = open(path + '考试参考答案%s.txt' % (quizNum + 1), 'w', encoding='utf-8')    # 输出头部内容    quizFile.write('姓名:\n\n日期:\n\n分数:\n\n')    quizFile.write((' ' * 20) + '中国省份城市考试 (摘自 %s)' % (quizNum + 1))    quizFile.write('\n\n')    #  获取数据字典中所有的key    cities = list(capitals.keys())    # 打乱顺序    random.shuffle(cities)        # 将问题和答案选项输出到文件    generateQuizAnswer(cities, quizFile)        quizFile.close()    answerKeyFile.close()print("生成成功")

3.将问题和答案选项输出到文件中​​​​​​​

'''  生成问题和答案'''def generateQuizAnswer(cities, quizFile):    for questionNum in range(len(capitals)):        # 获取正确答案和错误答案        correctAnswer = capitals[cities[questionNum]]        wrongAnswers = list(capitals.values())        # 移除一个正确答案,然后在剩下的列表中随机取三个错误答案        del wrongAnswers[wrongAnswers.index(correctAnswer)]        wrongAnswers = random.sample(wrongAnswers, 3)        # 组合成一个答案选项        answerOptions = wrongAnswers + [correctAnswer]        random.shuffle(answerOptions)        # 将内容写入测试试卷和答案文件        quizFile.write('%s.下列哪个是%s的省份城市?\n'                       % (questionNum + 1, cities[questionNum]))        # 将选项输出到文件        for i in range(4):            quizFile.write(' %s. %s\n' % ('ABCD'[i], answerOptions[i]))        quizFile.write('\n')        # 把答案选项写入到文件中        answerKeyFile.write('%s. %s\n' % (questionNum + 1,                                          'ABCD'[answerOptions.index(correctAnswer)]))

 

 

最后生成了如下文件:

我们来对比一下试卷3和试卷2

 

我们看看答案:

试卷一的答案:

 

试卷二的答案:

发现问题果然不一样,哈哈

 

这个程序还有很多问题,

  1. word格式不好手动调整,一调整就要调整很多份

  2. 题目和答案不固定,错误选项都是从其他问题答案中取的,我觉得最好能拿一套题库,录入数据库,然后再进行试卷的生成好一些。不过目前学到的知识不支持我这么做,还是后面再跟进吧

喜欢本文的话,可以关注以下公众号,每天定时更新一篇python学习日记,让我们一起成长!

 

转载地址:http://banlf.baihongyu.com/

你可能感兴趣的文章
kubectl 创建 Pod 背后到底发生了什么?
查看>>
Kube-scheduler 源码分析(二):调度程序启动前逻辑
查看>>
kubernetes 1.15 有哪些让人眼前一亮的新特性?
查看>>
云原生周报:第 3 期
查看>>
深入理解 Linux Cgroup 系列(三):内存
查看>>
7月最新Java微服务资料
查看>>
Linux 指令
查看>>
wi10优化
查看>>
windows console 颜色设置
查看>>
VC unicode下Cstring转char*
查看>>
MFC ListBox使用
查看>>
Linux 使用grep筛选多个条件
查看>>
H264 NALU分析(sps,pps,关键帧,非关键帧)
查看>>
Windows文本加载wscite的使用
查看>>
浏览器主页被篡改修复
查看>>
FFmpeg - 新老接口对比问题
查看>>
Windows下MinGW编译ffmpeg库
查看>>
SDL在windows下使用 - 显示YUV
查看>>
三种方式YUV420转RGB24/BGR24,实测可用
查看>>
Windows下使用VS2015编译openssl库
查看>>