ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【Class 35】第七章 实例 生成35份试卷

2019-03-03 18:03:02  阅读:231  来源: 互联网

标签:试题 试卷 list 35 write 答案 Class TestFile


第七章实例: 生成随机的测验试卷文件

假如你是一位地理老师,班上有 35 名学生,你希望进行美国各州首府的一个小测验。
不妙的是,班里有几个坏蛋,你无法确信学生不会作弊。
你希望随机调整问题的次序,这样每份试卷都是独一无二的,这让任何人都不能从其他人那里抄袭答案。
当然,手工完成这件事又费时又无聊。好在,你懂一些 Python。

下面是程序所做的事:
• 创建 35 份不同的测验试卷。
• 为每份试卷创建 50 个多重选择题,次序随机。
• 为每个问题提供一个正确答案和 3 个随机的错误答案,次序随机。
• 将测验试卷写到 35 个文本文件中。
• 将答案写到 35 个文本文件中。

这意味着代码需要做下面的事:
• 将州和它们的首府保存在一个字典中。
• 针对测验文本文件和答案文本文件,调用 open()、write()和 close()。
• 利用 random.shuffle()随机调整问题和多重选项的次序。

答案如下:

#! python3

import random

# 测试数据, key是美国各州, value是美国各州州府.
capitals = {'Alabama': 'Montgomery', 'Alaska': 'Juneau', 'Arizona': 'Phoenix',
'Arkansas': 'Little Rock', 'California': 'Sacramento', 'Colorado': 'Denver',
'Connecticut': 'Hartford', 'Delaware': 'Dover', 'Florida': 'Tallahassee',
'Georgia': 'Atlanta', 'Hawaii': 'Honolulu', 'Idaho': 'Boise', 
'Illinois':'Springfield', 'Indiana': 'Indianapolis', 'Iowa': 'Des Moines', 
'Kansas':'Topeka', 'Kentucky': 'Frankfort', 'Louisiana': 'Baton Rouge', 
'Maine':'Augusta', 'Maryland': 'Annapolis', 'Massachusetts': 'Boston', 
'Michigan':'Lansing', 'Minnesota': 'Saint Paul', 'Mississippi': 'Jackson', 
'Missouri':'Jefferson City', 'Montana': 'Helena', 'Nebraska': 'Lincoln', 
'Nevada':'Carson City', 'New Hampshire': 'Concord', 'New Jersey': 'Trenton', 
'NewMexico': 'Santa Fe', 'New York': 'Albany', 'North Carolina': 'Raleigh',
'North Dakota': 'Bismarck', 'Ohio': 'Columbus', 'Oklahoma': 'Oklahoma City',
'Oregon': 'Salem', 'Pennsylvania': 'Harrisburg', 'Rhode Island': 'Providence',
'South Carolina': 'Columbia', 'South Dakota': 'Pierre', 'Tennessee':'Nashville', 
'Texas': 'Austin', 'Utah': 'Salt Lake City', 'Vermont':'Montpelier', 
'Virginia': 'Richmond', 'Washington': 'Olympia', 'WestVirginia': 'Charleston', 
'Wisconsin': 'Madison', 'Wyoming': 'Cheyenne'}


# 生成 35 份 试题 和 答案
for quizNum in range(35):
    # 创建 试题 和 答案的文本  
    TestFile = open('试题%s.txt' % (quizNum + 1), 'w')
    AnswerKeyFile = open('答案%s.txt' % (quizNum + 1), 'w')

    # 将试题 头信息 写入试题中
    TestFile.write('姓名:\n\n日期:\n\n学号:\n\n')
    TestFile.write((' ' * 20) + '美国州府测试 ( 试题 %s )' % (quizNum + 1))
    TestFile.write('\n\n')

    # 将capitals list 的 keys生成一个新的list
    states = list(capitals.keys())
    # 打乱 key list
    random.shuffle(states)
    
    # 循环遍历 capitals , 给states key list 生成答案
    for questionNum in range(50):
        # 正确答案
        correctAnswer = capitals[ states[questionNum] ]  

        # 获得所有value, 将争取答案删除,获得剩余的错误答案
        wrongAnswers = list(capitals.values())  
        del wrongAnswers[wrongAnswers.index(correctAnswer)]

        # 随机获得 3 个错误答案, 将3个错误答案,和正确答案放在同一个 list 中
        wrongAnswers = random.sample(wrongAnswers, 3)
        answerOptions = wrongAnswers + [correctAnswer]
        # 打乱答案
        random.shuffle(answerOptions)
 
        # 将题目 和 答案选项 写入试题
        TestFile.write('第%s题.  %s的州府是______? \n' % (questionNum + 1,states[questionNum]))
        for i in range(4):
            TestFile.write(' %s. %s\n' % ('ABCD'[i], answerOptions[i]))
        TestFile.write('\n')

        # 将正确答案,写入试题中
        AnswerKeyFile.write('%s. %s\n' % (questionNum + 1, 'ABCD'[answerOptions.index(correctAnswer)]))
    
    # 关闭 试题 和 答案 文件.
    TestFile.close()
    AnswerKeyFile.close()

运行结果如下:
在这里插入图片描述
在这里插入图片描述

标签:试题,试卷,list,35,write,答案,Class,TestFile
来源: https://blog.csdn.net/Ciellee/article/details/88091317

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有