主要内容 #
- 综合实战:利用pyton随机生成若干套————关于python关键字的试卷以及配套答案
7.配套答案的写入 #
前面三节课,我们实现了资源文件的读取,测试以及答案文档的创建,写入测试问题及选项,接下里我们只需要向答案文档里面写入正确答案即可!注意这里把答案文档写入的代码与72课示例2放在了一起import random ########## 读取资源文件 keydict={}#把读取的关键字以及对应的解释存放在该字典中 linenumber=0#读取文件的行数 try: with open('keyword.txt',mode='r') as data:#打开文件,并将返回的文件对象命名为data for line in data:#逐行读取,line表示每一行的字符串,包括末尾的换行符'\n' linenumber+=1 if linenumber==1: pass#代码的占位符,什么也不会发生,这里表示第一行不读取 else: klist=line.strip().split('\t')#line.strip()首先去掉了每一行的'\n'换行符,其次使用制表符('\t')进行分割 keydict[klist[0]]=klist[1] except FileNotFoundError:#捕捉到没有找到文件的错误(检查一下自己是否粘贴到了当前目录) print('keyword.txt' + ' not found!') ##########测试以及答案文档创建 for i in range(30): with open('测试{}.txt'.format(i+1),'w') as quiz:#注意字符串占位符{}.format()的格式 quiz.write(' ' * 8 + '大师码第三期python关键字小测试'+'\n')#测试试卷的title quiz.write(' '*10+'姓名:'+'_'*5+' '*1+'成绩:'+'_'*5+' '*10+'\n') with open('答案%d.txt'%(i+1),'w') as answerfile:#使用d%作为字符串占位符 pass ########## #测试问题以及选项的写入;对应答案文档的写入 keylist = list(keydict.keys()) keyexp = list(keydict.values()) for i in range(30): num1 = random.randint(0, 100) answerlist=[]#保存一套试题题目的测试答案 with open('测试{}.txt'.format(i + 1), 'a') as quiz:#采用追加写入方式打开测试文档 for j in range(15): quiz.write('%d.Python关键字"%s"的含义:( )' % (j+1,keylist[(num1+j)%35])+'\n') # 创建答案选项 set1 = set() set1.add(keyexp[(num1 + j) % 35]) while len(set1) <= 3: set1.add(keyexp[random.randint(0, 34)]) for k,s in zip(range(4),set1): quiz.write('%s.'%('ABCD'[k]) +s+'\n') if s==keyexp[(num1+j)%35]:#判断选项是否与正确答案匹配 answerlist.append('%d.%s'%(j+1,'ABCD'[k])) quiz.write('\n') with open('答案%d.txt' % (i + 1), 'a') as answerfile: answerfile.write(' ' * 8+'大师码第三期python关键字测试%d答案\n'%(i+1)) for s in answerlist: answerfile.write(s+' ')
8.项目小结 #
python中的文本文件是通过open()函数进行读写的,文件读写之前了解文件的路径以及编码方式,以合适的模式读写文件。掌握集合的唯一性。示例一和以下示例都能实现随机试卷的功能,你能尽量找一找两者不同的地方吗?import random ########## 读取资源文件 keydict={}#把读取的关键字以及对应的解释存放在该字典中 linenumber=0#读取文件的行数 try: with open('keyword.txt',mode='r') as data:#打开文件,并将返回的文件对象命名为data for line in data:#逐行读取,line表示每一行的字符串,包括末尾的换行符'\n' linenumber+=1 if linenumber==1: pass#代码的占位符,什么也不会发生,这里表示第一行不读取 else: klist=line.strip().split('\t')#line.strip()首先去掉了每一行的'\n'换行符,其次使用制表符('\t')进行分割 keydict[klist[0]]=klist[1] except FileNotFoundError:#捕捉到没有找到文件的错误(检查一下自己是否粘贴到了当前目录) print('keyword.txt' + ' not found!') ########## 随机试卷以及配套答案的生成 keylist = list(keydict.keys()) keyexp = list(keydict.values()) for i in range(30): num1 = random.randint(0, 100) answerlist = [] # 保存一套试题题目的测试答案 with open('测试{}.txt'.format(i+1),'w') as quiz,\ open('答案%d.txt'%(i+1),'w') as answerfile:#使用d%作为字符串占位符:#注意字符串占位符{}.format()的格式 quiz.write(' ' * 8 + '大师码第三期python关键字小测试'+'\n')#测试试卷的title quiz.write(' '*10+'姓名:'+'_'*5+' '*1+'成绩:'+'_'*5+' '*10+'\n') answerfile.write(' ' * 8 + '大师码第三期python关键字测试%d答案\n' % (i + 1))#配套答案的title for j in range(15): quiz.write('%d.Python关键字"%s"的含义:( )' % (j+1,keylist[(num1+j)%35])+'\n') # 创建答案选项 set1 = set() set1.add(keyexp[(num1 + j) % 35]) while len(set1) <= 3: set1.add(keyexp[random.randint(0, 34)]) for k,s in zip(range(4),set1): quiz.write('%s.'%('ABCD'[k]) +s+'\n') if s==keyexp[(num1+j)%35]:#判断 answerlist.append('%d.%s'%(j+1,'ABCD'[k])) quiz.write('\n') for s in answerlist: answerfile.write(s+' ')
OJ训练题 #
1、【入门】考试成绩的分布情况 – ★
2、【入门】字母矩形2 – ★
3、【入门】元素插入有序数组 – ★
4、【入门】回文字母 – ★★
5、【入门】数组查找及替换 – ★★★