基础知识

我接触python编程是从Al Swigart的Automate the boring stuff开始的。

看到书中介绍如何操作文件那一章时,是真的被给出的程序实例惊艳到了:“哇,这样的功能用这么短的代码就可以实现呀!”,

原来我这样的小白就算只学这么一点点,就可以用学到的知识编出这么有用的程序啊!

是的,当时就是这种感觉。

所以等到自己录文件这一节的教学视频,果断把这个程序找出来稍做修改后奉上。

独乐乐不如众乐乐----->独惊艳不如众惊艳!

这个程序实例的功能就是帮地理老师给学生出考卷,

每张卷子有34道题(因为我国有34个省份),题目都是34到XXX省份的省会是啥?

程序要为每一位同学准备一份“独特”的考卷,

每个人题目的排列都不同,每道题下的三个混淆视听到答案也都随机抽取随机排列。

结论:传统作弊方式之“偷看学霸卷子”这种方式瞬间被秒成渣。

再介绍这个程序实例之前,在视频中我们介绍了:

纯文本文件(英文、中文)的读、写、添加;

二进制文件(用图片文件和音频文件做的例子)的读然后写,在程序中完成了文件的拷贝功能;

引用shelve模块把程序中的变量保存到文件中,需要时再取出来;

用pprint.pformat()把变量的数据类型(文件这种数据类型不可以)转化成字符串,保存到纯文本.py文件,需要时通过import引进。

# The quiz data. Keys are states and values are their capitals.

capitals = {
'北京': '北京',
'天津':'天津',
'上海':'上海',
'重庆':'重庆',
'河北':'石家庄',
'山西':'太原',
'辽宁':'沈阳',
'吉林':'长春',
'黑龙江':'哈尔滨',
'江苏':'南京',
'浙江':'杭州',
'安徽':'合肥',
'福建':'福州',
'江西':'南昌',
'山东':'济南',
'河南':'郑州',
'湖北':'武汉',
'湖南':'长沙',
'广东':'广州',
'海南':'海口',
'四川':'成都',
'贵州':'贵阳',
'云南':'昆明',
'陕西':'西安',
'甘肃':'兰州',
'青海':'西宁',
'西藏':'拉萨',
'广西': '南宁',
'内蒙':'呼和浩特',
'宁夏':'银川',
'新疆':'乌鲁木齐',
'香港':'香港',
'澳门':'澳门',
'台湾':'台北'}
# Creates quizzes with questions and answers in random order, along with the answer key.

from pathlib import Path
import random
import provinceCapital

# assign location and make directory for exam paper
quizFolder = Path('./quizFolder')
quizFolder.mkdir(mode=0o777, parents=True, exist_ok=True)

# Get paper number
paperNum = int(input("\n您要出几份考卷?  "))

# Generate paperNum quiz files and answer key files
for quizNum in range(paperNum):

	# Create the quiz and answer key files
	quizFilePath = quizFolder.joinpath('quiz{}.txt'.format(quizNum + 1))
	quizFile = quizFilePath.open(mode='w', encoding='utf-8')
	answerKeyFilePath = quizFolder.joinpath('quiz_answers{}.txt'.format(quizNum + 1))
	answerKeyFile = answerKeyFilePath.open(mode='w', encoding='utf-8')

	# Write out the header for the quiz.
	quizFile.write('姓名:\n\n学号:\n\n班级:\n\n')
	quizFile.write(' '*20 + '考 卷 {}'.format(quizNum + 1))
	quizFile.write('\n\n')

	# Shuffle the order of the provinces
	provinces = list(provinceCapital.capitals.keys())
	random.shuffle(provinces)

	# loop through all provinces, making a question for each.
	for questionNum in range(len(provinces)):

		# Get right answers.
		correctAnswer = provinceCapital.capitals[provinces[questionNum]]

		# Get wrong answer pool: all answers then exclude the correct answer
		wrongAnswers = list(provinceCapital.capitals.values())
		wrongAnswers.remove(correctAnswer)

		# random take 3 from wrong answer pool and combine the right one to make 4 answer options
		wrongAnswers = random.sample(wrongAnswers, 3)
		answerOptions = wrongAnswers + [correctAnswer]
		random.shuffle(answerOptions)

		# Write the question and the answer options to the quiz file.
		quizFile.write('{}、 {}的省会是?\n'.format(questionNum+1, provinces[questionNum]))

		for i in range(4):
			quizFile.write('{}.  {}\n'.format('ABCD'[i], answerOptions[i]))
		quizFile.write('\n')
		# Write the answer key to a file.
		answerKeyFile.write('{}. {}\n'.format(questionNum + 1, 'ABCD'[answerOptions.index(correctAnswer)]))

	quizFile.close()
	answerKeyFile.close()

文件预备知识部分:
 
文件程序实例部分:
 

1 1 1 1 1 1 1 1 1 1 Rating 3.43 (7 Votes)