zoukankan      html  css  js  c++  java
  • 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道题目。
    ...
  • 相关阅读:
    Ubuntu学习
    MYSQL中group_concat有长度限制!默认1024
    关于Ubuntu中Could not get lock /var/lib/dpkg/lock解决方案
    PHP开发接口使用RSA进行加密解密方法
    WebSocket实战之————Workerman服务器的安装启动
    vim 命令图解
    ubuntu下安装Apache+PHP+Mysql
    Ubuntu 下Apache安装和配置
    android调试输出
    使用AsyncTask异步更新UI界面及原理分析
  • 原文地址:https://www.cnblogs.com/BeautifulSoup/p/8427623.html
Copyright © 2011-2022 走看看