自动生成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))