概述
假设语文老师给学生最近学习的古诗进行一次小测验,但是为了防止作弊,每个人的试卷出题顺序各不相同。
程序:
创建20份不同的试卷
每份数据创建10个选择题,次序随机。
每个问题有四个选项,其中只有一个正确的选项。
将20份文件写到20个文本文件中。
将20份答案写到20个文本文件中。
程序设计:
字典保存选择题的正确匹配。
调用open() ,write() ,和close()方法写入写出文件。
利用random.shuffle()随机调整问题和多重选项的次序。
第一步:将测验数据保存在一个字典中
如果你对python感兴趣,我这有个学习Python基地,里面有很多学习资料,感兴趣的+Q群:688244617
#!python3
#test.py - 随机生成测试试卷
import random
#问题的数据保存在字典中,诗歌名称作为键,作者作为值。
poems = {'《水调歌头·明月几时有》':'苏轼',
'《将进酒》':'李白',
'《桃花源记》':'陶渊明',
'《陋室铭》':'刘禹锡',
'《爱莲说》':'周敦颐','《元日》':'王安石',
'《满江红·写怀》':'岳飞','《春望》':'杜甫',
'《岳阳楼记》':'范仲淹',
'《长恨歌》':'白居易',
'《醉翁亭记》':'欧阳修',
'《小石潭记》':'柳宗元',
'《清明》':'杜牧',
'《春江花月夜》':'张若虚',
'《春日》':'朱熹',
'《天净沙·秋思》':'马致远',
'《过零丁洋》':'文天祥',
'《白雪歌送武判官归京》':'岑参'
}
第二步:有了上面的字典,我们就可以随机生成20份不同的试卷了。
#我们可以用上面的字典随机的出20份试卷
for num in range(20):
#创建试卷和答案文本文件
testFile = open('poem_test%s.txt' % (num + 1),'w')
answerFile = open('poem_answer%s.txt' % (num + 1),'w')
#创建试卷的头部格式
testFile.write('姓名:nn日期:nn年级:nn')
testFile.write('试卷号:%s' %(num + 1))
testFile.write('nnn')
#随机获取诗歌名称
names = list(poems.keys())
random.shuffle(names)
第三步:创建答案选项
这个for循环是要包含在上面一个for循环中的,因为哦们需要为每一个文件创建选项。
--snip--
for questionNum in range(10):
#试卷的正确的选项,就是names列表中的值在字典中对应的作者
correctAnswer = poems[names[questionNum]]
#试卷的错误的选项,就是字典中所有的值
#然后在每次循环过程中去掉其中的正确的那一项,
wrongAnswers = list(poems.values())
del wrongAnswers[wrongAnswers.index(correctAnswer)]
#随机选择三个错误的答案
#random中sample(seq, n)函数:从序列seq中选择n个随机且独立的元素;
wrongAnswers = random.sample(wrongAnswers,3)
#问题单包含的四个选项
answerOptions = wrongAnswers + [correctAnswer]
#打乱答案顺序
random.shuffle(answerOptions)
第四步:将内容写入测验试卷和答案文件
这段代码后面的close()方法是包含在第一个for循环中的。
--snip--
#将问题和答案写入文件中,表示一行代码写不下可以换多行
testFile.write('%s,%s的作者是:n' %
(questionNum + 1,names[questionNum]))
for i in range(4):
testFile.write('%s. %sn'%('ABCD'[i],answerOptions[i]))
testFile.write('n')
#写入答案
answerFile.write('%s.%sn' % (questionNum + 1,'ABCD'
[answerOptions.index(correctAnswer)]))
testFile.close()
answerFile.close()
完整代码:
#!python3
#test.py - 随机生成测试试卷
import random
#问题的数据保存在字典中
poems = {'《水调歌头·明月几时有》':'苏轼',
'《将进酒》':'李白',
'《桃花源记》':'陶渊明',
'《陋室铭》':'刘禹锡',
'《爱莲说》':'周敦颐','《元日》':'王安石',
'《满江红·写怀》':'岳飞','《春望》':'杜甫',
'《岳阳楼记》':'范仲淹',
'《长恨歌》':'白居易',
'《醉翁亭记》':'欧阳修',
'《小石潭记》':'柳宗元',
'《清明》':'杜牧',
'《春江花月夜》':'张若虚',
'《春日》':'朱熹',
'《天净沙·秋思》':'马致远',
'《过零丁洋》':'文天祥',
'《白雪歌送武判官归京》':'岑参'
}
#我们可以用上面的字典随机的出20份试卷
for num in range(20):
#创建试卷和答案文本文件
testFile = open('poem_test%s.txt' % (num + 1),'w')
answerFile = open('poem_answer%s.txt' % (num + 1),'w')
#创建试卷的头部格式
testFile.write('姓名:nn日期:nn年级:nn')
testFile.write('试卷号:%s' %(num + 1))
testFile.write('nn')
#根据诗词名字随机生成题目
names = list(poems.keys())
#random.shuffle()随机打乱一个序列中的元素
random.shuffle(names)
for questionNum in range(10):
#试卷的正确的选项,就是names列表中的值在字典中对应的作者
correctAnswer = poems[names[questionNum]]
#试卷的错误的选项,就是字典中所有的值
#然后在每次循环过程中去掉其中的正确的那一项,
wrongAnswers = list(poems.values())
del wrongAnswers[wrongAnswers.index(correctAnswer)]
#随机选择三个错误的答案
#random中sample(seq, n)函数:从序列seq中选择n个随机且独立的元素;
wrongAnswers = random.sample(wrongAnswers,3)
#问题单包含的四个选项
answerOptions = wrongAnswers + [correctAnswer]
#打乱答案顺序
random.shuffle(answerOptions)
#将问题和答案写入文件中,表示一行代码写不下可以换多行
testFile.write('%s,%s的作者是:n' %
(questionNum + 1,names[questionNum]))
for i in range(4):
testFile.write('%s. %sn'%('ABCD'[i],answerOptions[i]))
testFile.write('n')
#写入答案
answerFile.write('%s.%sn' % (questionNum + 1,'ABCD'
[answerOptions.index(correctAnswer)]))
testFile.close()
answerFile.close()
运行结果如下:
生成了20份试卷和20份答案,每份试卷和答案如下:
answerFile1.txt
1.C
2.C
3.A
4.D
5.A
6.B
7.C
8.B
9.D
10.C
testFile1.txt
姓名:
日期:
年级:
试卷号:1
1,《水调歌头·明月几时有》的作者是:
A. 范仲淹
B. 岳飞
C. 苏轼
D. 杜甫
2,《清明》的作者是:
A. 李白
B. 范仲淹
C. 杜牧
D. 陶渊明
3,《天净沙·秋思》的作者是:
A. 马致远
B. 李白
C. 朱熹
D. 苏轼
#这里只展示了前面3道题,每套试卷都有10道题目。
...
最后
以上就是醉熏书包为你收集整理的Python—— 随机生成测试试卷的全部内容,希望文章能够帮你解决Python—— 随机生成测试试卷所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复