我接触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()
文件预备知识部分:
文件程序实例部分: