编程快速上手 第8章 生成随机的测试试卷文件

import os,random,shutil
"""shutil 用于清除已有根文件夹,创建新环境"""
root_folder = os.path.join(os.getcwd(),'test_paper') # 定义存放试卷的根目录
if  os.path.exists (root_folder): # 检查是否存在老根目录
    shutil.rmtree(root_folder) # 删除老根目录
    os.makedirs(root_folder) # 创建新根目录(通过文件夹修改日期验证)
else:
    os.makedirs(root_folder) # 检查不存在目录,直接创建


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',
'New Mexico': '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',
'West Virginia': 'Charleston', 'Wisconsin': 'Madison', 'Wyoming': 'Cheyenne'}

# 在根目录中创建试卷及对应试卷的答案
# 分别创建35份试卷和答案

m = os.path.join(root_folder,'quiz') # 定义绝对路径 试卷通用名
n = os.path.join(root_folder,'answer') # 定义绝对路径 答案通用名

# 定义 i 且循环35次,每一次新建一份试卷、答案
for i in range(35): 
    # 在根目录中创建测试试卷和答案文件
    test_file = open(m + '{}.txt'.format(i+1),'w')
    test_answer = open(n + '{}.txt'.format(i+1),'w')

    # 创建试卷标题、姓名、日期、测试课时、两个空行
    test_file.write((' State Capitals Quiz  (From {}) ').format(i+1).center(65))
    test_file.write('\n\nName:\nDate:\n\nPeriod:\n\n')
    test_file.write('\n\n')

    # 创建答案文件标题、两个空行
    test_answer.write((' State Capitals Quiz  (Form {})\n ').format(i+1).center(65))
    test_answer.write('\n\n')
    
    # 将各州的键存储在 statelist 列表中
    statelist = list(capitals.keys()) 
    random.shuffle(statelist) # 将州键所在的列表,重新洗牌——打乱顺序(备用)
   
    # 用len 计算字典键值对和(共50个州),获得循环50次,以便在试卷中创建50个问题
    for j in range(len(capitals)):
        # 获取正确答案(备用)
        correct_answer = capitals[statelist[j]]
        
        # 获取错误答案(先将字典值通过list转换成列表,在把列表中正确的答案的索引找出并删除)
        # 得到全错列表,然后在里面随机取3个值组成新的错误列表(包含3个错误答案)
        wrong_answers = list(capitals.values())
        del wrong_answers[wrong_answers.index(correct_answer)]
        wrong_answers = random.sample(wrong_answers,3)
       
        # 用正确答案和错误答案——组合每个问题的4个选项(ABCD)
        answer_options = wrong_answers + [correct_answer]
        
        # 将新组合的答案选项列表打乱顺序(备用)
        random.shuffle(answer_options)
        
        # 将问题写入试卷
        test_file.write('{0}. What is the capital of {1}?\n'.format(j+1,statelist[j]))
        # 问题选项循环
        for k in range(4):
            # 写入ABCD四个字母 以及 字母对应的 答案选项中被打乱的随机表项
            test_file.write('  {0}. {1}\n'.format('ABCD'[k],answer_options[k]))
        
        # 写入一个换行符(问题建空行)
        test_file.write('\n')

        # 将试卷中每题正确答案写入 test_answer 文件对应问题编号中
        # format 第一个,对应 50题序号、第二个对应答案选项中正确答案对应的索引,在给出对应选项字母、第三个是对应正确答案
        test_answer.write('{0}. {1} {2}\n'.format(j+1,'ABCD'[answer_options.index(correct_answer)],correct_answer))
    
    # 退出循环关闭每完成的一张试卷
    test_file.close()
    # 退出循环关闭没次完成的答案文件
    test_answer.close()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值