自动生成50份试卷
前言
项目源自《python让繁琐工作自动化》第八章,项目8.5
项目
假如你是一位地理老师,班上有 35 名学生,你希望进行中国各省份的省会城市
的一个小测验。不妙的是,班里有几个坏蛋,你无法确信学生不会作弊。你希望随机调整
问题的次序,这样每份试卷都是独一无二的,这让任何人都不能从其他人那里抄袭
答案。当然,手工完成这件事又费时又无聊。
好在,你懂一些 Python
源码如下
#!python3
#-*- coding:utf-8 -*-
#randomQuiz.py - 随机生成35份不同的测试试卷,以及对应的答案
import random
import sys, os
import shutil
#中国省,及其省会城市
province = {
'北京': '北京市',
'天津': '天津市',
'上海': '上海市',
'重庆': '重庆市',
'河南省': '郑州市',
'安徽省': '合肥市',
'福建省': '福州市',
'甘肃省': '兰州市',
'贵州省': '贵阳市',
'海南省': '海口市',
'河北省': '石家庄市',
'黑龙江省': '哈尔滨市',
'湖北省': '武汉市',
'湖南省': '长沙市',
'吉林省': '长春市',
'江苏省': '南京市',
'江西省': '南昌市',
'辽宁省': '沈阳市',
'青海省': '西宁市',
'山东省': '济南市',
'山西省': '太原市',
'陕西省': '西安市',
'四川省': '成都市',
'云南省': '昆明市',
'浙江省': '杭州市',
'台湾省': '台北市',
'广东省': '广州市',
'广西壮族自治区': '南宁市',
'内蒙古自治区': '呼和浩特市',
'宁夏回族自治区': '银川市',
'西藏藏族自治区': '拉萨市',
'新疆维吾尔自治区': '乌鲁木齐市',
'香港': '香港',
'澳门': '澳门'
}
os.chdir(r'D:\py')
#检查文件夹是否创建,如果已存在,删除并重新创建
if not (os.path.isdir(r'.\Quize') and os.path.isdir(r'.\Answer')):
os.mkdir(r'.\Quize')
os.mkdir(r'.\Answer')
print("Quize 和 Answer文件夹已创建。")
else:
shutil.rmtree(r'.\Quize')
shutil.rmtree(r'.\Answer')
os.mkdir(r'.\Quize')
os.mkdir(r'.\Answer')
print("已删除,并重新创建")
print(os.getcwd())
print("省会城市问答卷生成器".center(50, '-'))
#生成35份试卷
for quizNum in range(50):
#生成问卷和答卷文件,分别放入Quiz、Answer文件夹
quizeFile = open('.\\Quize\\省会城市问答卷%s.txt' % (quizNum + 1), 'w')
answerKeyfile = open('.\\Answer\\%s卷答案.txt' % (quizNum + 1), 'w')
#给答卷写入标题
quizeFile.write('姓名:\n\n日期:\n\n学号:\n\n')
quizeFile.write('中国省会城市问答卷'.center(100))
quizeFile.write('\n\n')
#打乱省会名称的顺序
province_name = list(province.keys())
random.shuffle(province_name)
#生成问题,以及答案选项
for questionNum in range(34):
# 获取正确和错误的答案
correctAnswer = province[province_name[questionNum]]
worongAnswers = list(province.values())
del worongAnswers[worongAnswers.index(correctAnswer)]
worongAnswers = random.sample(worongAnswers, 3)
#打乱答案
answerOption = worongAnswers + [correctAnswer]
random.shuffle(answerOption)
#把问题和答案选项写入问卷文件中
quizeFile.write('%s. %s的省会城市是?\n' % (questionNum + 1, province_name[questionNum]))
for i in range(4):
quizeFile.write(' %s. %s\n' % ('ABCD'[i], answerOption[i]))
quizeFile.write('\n')
#把每一问的正确答案写入答卷文件中
answerKeyfile.write('%s. %s\n' % (questionNum + 1, 'ABCD'[answerOption.index(correctAnswer)]))
quizeFile.close()
answerKeyfile.close()
print("卷%s完成!" % (quizNum + 1))