Python DayDayUp —— 小项目实现(二)

项目:随机生成测试试卷

假设语文老师给学生最近学习的古诗进行一次小测验,但是为了防止作弊,每个人的试卷出题顺序各不相同。

程序:

  • 创建20份不同的试卷
  • 每份数据创建10个选择题,次序随机。
  • 每个问题有四个选项,其中只有一个正确的选项。
  • 将20份文件写到20个文本文件中。
  • 将20份答案写到20个文本文件中。

程序设计:

  • 字典保存选择题的正确匹配。
  • 调用open() ,write() ,和close()方法写入写出文件。
  • 利用random.shuffle()随机调整问题和多重选项的次序。

第一步:将测验数据保存在一个字典中

#!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('姓名:

日期:

年级:

')
     testFile.write('试卷号:%s' %(num + 1))
     testFile.write('


')

     #随机获取诗歌名称
     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的作者是:
' % 
                         (questionNum + 1,names[questionNum]))
          for i in range(4):
               testFile.write('%s. %s
'%('ABCD'[i],answerOptions[i]))
          testFile.write('
')

          #写入答案
          answerFile.write('%s.%s
' % (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('姓名:

日期:

年级:

')
     testFile.write('试卷号:%s' %(num + 1))
     testFile.write('

')

     #根据诗词名字随机生成题目
     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的作者是:
' % 
                         (questionNum + 1,names[questionNum]))
          for i in range(4):
               testFile.write('%s. %s
'%('ABCD'[i],answerOptions[i]))
          testFile.write('
')

          #写入答案
          answerFile.write('%s.%s
' % (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道题目。
...
原文地址:https://www.cnblogs.com/BeautifulSoup/p/8427623.html