书上的缩进令人看不懂,且多有错误,故手打了一遍,重新调整了缩进。
《randomQuizGenerator.py》其中首都的data懒得打35个上去,就打了3个,后面随便编造。
# python 3
# randomQuizGenerator.py
# random order, along with the answer key
import random
# The quiz data .Keys are states and values are their capitals.
capitals = {'Alabama': 'Montgomery', 'Alaska': 'Jnueau', 'Arizona': 'Phoenix',
'4': '4', '5': '5', '6': '6', '7': '7', '8': '8', '9': '9', '10': '10'}
# Generate 35 quiz files.
for quizNum in range(35):
# 创建试卷文件,以写模式打开文件
quizFile = open(f'D:\\Quiz\\capitalsquiz{quizNum + 1 }.txt', 'w')
answerKeyFile = open(f'capitalsquiz_answers{quizNum + 1}.txt', 'w')
# f 是可以在字符串中直接加入变量,用花括号装起。
# quizNum 是唯一编号,quizNUm+1是什么意思?仅是因为for以0开头吗#yes
# w表示以写模式打开文件
quizFile.write('Name:\n\nDate:\n\nPeriod:\n\n') # 文件内容第一行
quizFile.write((''*20) + f'State Capitals Quiz(Form{quizNum +1})') # 文件标题
quizFile.write('\n\n')
states = list(capitals.keys()) # 文件主体,元组
random.shuffle(states) # 创建stata中key的随机列表
for questionNum in range(10):
# capitals中,关于states的对应values
correctAnswer = capitals[states[questionNum]]
wrongAnswers = list(capitals.values()) # 从capitals中复制所有的值
del wrongAnswers[wrongAnswers.index(correctAnswer)] # delete 正确答案
wrongAnswers = random.sample(wrongAnswers, 3) # 随机选择3个无正确答案的值
answerOptions = wrongAnswers+[correctAnswer] # 3个错误答案加1个正确答案
random.shuffle(answerOptions) # 打乱答案
# quiz
quizFile.write(
f'{questionNum +1}.What is the capital of {states[questionNum]}?\n') # 问题编号+问题
for i in range(4): # 4个选项
# 以字符串ABCD为列表选择第i个,后跟answerOptions列表
quizFile.write(f"{'ABCD'[i]}.{answerOptions[i]}\n")
quizFile.write('\n')
# answer
answerKeyFile.write(
f"{questionNum +1}.{'ABCD'[answerOptions.index(correctAnswer)]}\n") # 答案文件
quizFile.close() # 对应open的tab即可
answerKeyFile.close() # 读取或写入文件后要跟close()