Python学习笔记文件读写之生成随机的测试试卷文件
随笔记录方便自己和同路人查阅。
#------------------------------------------------我是可耻的分割线-------------------------------------------
假如你是一个地理老师,班上有35名学生,你希望进行美国各州首府的一个小测验。不妙的是,班里有几个坏蛋,你无法确信
学生不会作弊。你希望随机调整问题的次序,这样每份试卷都是独一无二的,这让任何人都不能从其他人那里抄袭答案。当然,手工
完成这件事又费时又无聊。好在,你懂一些 Python。
下面是程序所做的事:
(1)创建35份不同的测试试卷
(2)为每份试卷创建50个多重选择题,次序随机
(3)为每个问题提供一个正确的答案和3个随机的错误答案,次序随机
(4)将测验试卷写到35个文本文件中
这意味着代码需要做下面的事:
(1)将州和它们的首府保存在一个字典中
(2)针对测验文本文件和答案文本文件,调用open()、write()和close()
(3)利用random.shuffle()随机调整问题和多种选项的次序
#------------------------------------------------我是可耻的分割线------------------------------------------
示例代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | #! python 3 # -*- coding:utf-8 -*- # Autor: Li Rong Yang #第一步 import random #第二步,生成一个字典,以美国州名作为键,以州首府作为值 capitals = { 'Alabama' : 'Montgomery' , 'Alaska' : 'Juneau' , 'Arizona' : 'Phoenix' , 'Arkansas' : 'Little Rock' , 'California' : 'Sacramento' , 'Colorado' : 'Denver' , 'Connecticut' : 'Hartford' , 'Delaware' : 'Dover' , 'Florida' : 'Tallahassee' , 'Georgia' : 'Atlanta' , 'Hawaii' : 'Honolulu' , 'Idaho' : 'Boise' , 'Illinois' : 'Springfield' , 'Indiana' : 'Indianapolis' , 'Iowa' : 'Des Moines' , 'Kansas' : 'Topeka' , 'Kentucky' : 'Frankfort' , 'Louisiana' : 'Baton Rouge' , 'Maine' : 'Augusta' , 'Maryland' : 'Annapolis' , 'Massachusetts' : 'Boston' , 'Michigan' : 'Lansing' , 'Minnesota' : 'Saint Paul' , 'Mississippi' : 'Jackson' , 'Missouri' : 'Jefferson City' , 'Montana' : 'Helena' , 'Nebraska' : 'Lincoln' , 'Nevada' : 'Carson City' , 'New Hampshire' : 'Concord' , 'New Jersey' : 'Trenton' , 'New Mexico' : 'Santa Fe' , 'New York' : 'Albany' , 'North Carolina' : 'Raleigh' , 'North Dakota' : 'Bismarck' , 'Ohio' : 'Columbus' , 'Oklahoma' : 'Oklahoma City' , 'Oregon' : 'Salem' , 'Pennsylvania' : 'Harrisburg' , 'Rhode Island' : 'Providence' , 'South Carolina' : 'Columbia' , 'South Dakota' : 'Pierre' , 'Tennessee' : 'Nashville' , 'Texas' : 'Austin' , 'Utah' : 'Salt Lake City' , 'Vermont' : 'Montpelier' , 'Virginia' : 'Richmond' , 'Washington' : 'Olympia' , 'West Virginia' : 'Charleston' , 'Wisconsin' : 'Madison' , 'Wyoming' : 'Cheyenne' } capitalsItems = list (capitals.items()) #第三步,创建35份试卷文件 for quizNum in range ( 35 ): #生成35份问题文件,名称为capitalsquiz + 1到35数字 quizFile = open ( 'D:\\quiz\\capitalsquiz%s.txt' % (quizNum + 1 ), 'w' ) # 生成35份答案文件,名称为capitalsquiz_answers%s + 1到35数字 answerKeyFile = open ( 'D:\\quiz\\capitalsquiz_anwers%s.txt' % (quizNum + 1 ), 'w' ) #写入测验试卷的头内容 quizFile.write( 'Name:\n\nDate:\n\nPeriod:\n\n' ) quizFile.write(( ' ' * 20 ) + 'State Capitals Quiz (Form %s)' % (quizNum + 1 )) quizFile.write( '\n\n' ) #把各州名转换为列表 states = list (capitals.keys()) #使用random.shuffle(),创建随机列表,内容为各州名 random.shuffle(states) for questionNum in range ( 50 ): '''这个循环将遍历打乱过的 states 列表中的州,从 states[0]到 states[49], 在 capitals 中找到每个州,将该州对应的首府保存在 correctAnswer 中''' correctAnswer = capitals[states[questionNum]] #可能的错误答案列表需要一点技巧。你可以从capitals字典中复制所有的值 wrongAnswers = list (capitals.values()) #删除正确的答案 del wrongAnswers[wrongAnswers.index(correctAnswer)] #然后从该列表中选择3个随机的值 wrongAnswers = random.sample(wrongAnswers, 3 ) '''random.sample()函数使得这种选择很容易,它的第一个参数是你希望选择的列表,第二个参数 是你希望选择的值的个数。完整的答案选项列表是这 3 个错误答案与正确答案的组合''' answerOptions = wrongAnswers + [correctAnswer] #最后 ,答案需要随机排列,这样正确的答案就不会总是选项 D。 random.shuffle(answerOptions) #quizFile.write('%s. What is the capital of %s?\n' % (questionNum + 1,states[questionNum])) quizFile.write( '%s. What is the capital of %s?\n' % (questionNum + 1 ,states[questionNum])) # 一个遍历整数 0 到 3 的 for 循环,将答案选项写入 answerOptions 列表 for i in range ( 4 ): #表达式'ABCD'[i]将字符串'ABCD'看成是一个数组,它在循环的每次迭代中,将分别求值为'A'、'B'、'C'和'D'。 quizFile.write( ' %s. %s\n' % ( 'ABCD' [i],answerOptions[i])) #写入换行 quizFile.write( '\n' ) '''表达式 answerOptions.index(correctAnswer)将在随机排序的答案选项中,找到正确答案的整数 下标,并且'ABCD'[answerOptions.index(correctAnswer)]将求值为正确答案的字母,写入到答案文 件中。''' answerKeyFile.write( '%s. %s\n' % (questionNum + 1 , 'ABCD' [answerOptions.index(correctAnswer)])) quizFile.close() answerKeyFile.close() |
运行结果:
分类:
Python基础
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异