一、问题概述
假如你是一位地理老师,班上有29个学生,你想测试一下班里的同学对中国所有省份省会城市的掌握情况。为了避免学生出现作弊的情况,你需要设计试卷题目,使得每张试卷的题目和答案都是随机生成的,这样就不会出现作弊的情况。如果是进行手动出题,那么耗费的时间是巨大的,还好,你懂得一些Python,如何使用代码设计来完成这一任务。
二、 问题梳理
你的程序应该做到以下事情:
- 创建29份不同的测试试卷;
- 为每份试卷创建29个选择题,次序随机生成;
- 为每个问题提供一个正确答案,三个错误答案,次序随机生成;
- 将试卷写到29个word文档中;
- 将答案写到29个word文档中;
因此代码要做的事情:
- 将各省和其省会保存到一个字典中;
- 针对测试文件和答案文件,调用open()、write()、close()函数;
- 利用random.shuffle()随机调整问题和多重选项的次序。
三、代码展示
具体功能实现代码如下:
import random
#1.将测验数据保存到一个字典中
capitals = {'黑龙江':'哈尔滨','吉林':'长春','辽宁':'沈阳','内蒙古':'呼和浩特','新疆':'乌鲁木齐','甘肃':'兰州','青海':'西宁',
'西藏':'拉萨','四川':'成都','宁夏':'银川','陕西':'西安','山西':'太原','河北':'石家庄','山东':'济南',
'北京':'北京','天津':'天津','河南':'郑州','安徽':'合肥','江苏':'南京','湖北':'武汉','重庆':'重庆','浙江':'杭州',
'广西':'南宁','江西':'南昌','湖南':'长沙','福建':'福州','广东':'广州','云南':'昆明','海南':'海口'}
#2.创建测试文件,并打乱问题的次序
for quizNum in range(29):
#2.1创建试题卷和试卷答案文档
quizFile = open('试题卷%s.doc' % (quizNum + 1),'w')
answerKeyFile = open('试卷答案%s.doc' % (quizNum + 1),'w')
#2.2创建试卷头部学生所填写的信息
quizFile.write('学号:\n姓名:\n日期:\n班级:\n')
quizFile.write('猜各省省会(试卷%s)'%(quizNum + 1))
quizFile.write('\n\n')
#2.3创建随机排列的省会的列表
states = list(capitals.keys())
random.shuffle(states)
#3.创建答案选项
for questionNum in range(29):
correctAnswer = capitals[states[questionNum]]
wrongAnswers = list(capitals.values())
del wrongAnswers[wrongAnswers.index(correctAnswer)]
wrongAnswers = random.sample(wrongAnswers,3)
answerOptions = wrongAnswers + [correctAnswer]
random.shuffle(answerOptions)
#4.将内容写入到测试试卷和答案文件
quizFile.write('%s. What is the capital of %s?\n' % (questionNum + 1,states[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)]))
quizFile.close() #试题卷文件关闭
answerKeyFile.close() #试卷答案文件关闭
四、执行效果展示
运行代码完成后,在代码文件目录下会自动生成29个试题文件和29个对应的答案文件,每一个试卷中的题目都是随机生成,符合项目的要求。
效果如图:
题目展示:
答案展示: