Python使用docx模块实现刷题功能代码
起由:
前一阵子想要刷一刷国二Python的题库,千方百计找到题库之后,打开一个个word文档,发现一题一题阅读很麻烦,而且答案就在题目的下面,阅读题目的时候想自己做出题目却又总能不经意看到答案,甚烦!遂开始敲代码,我要一题一题做,还不能看见答案。
着手:
word文档是这样的:
观察word内容,每道题目的题目内容和题目答案都是一样的格式,包括缩进、字体等等,那么就可以使用Python对文件的读操作,浏览文档的内容,在适当的内容区域设置输入,将输入与答案进行判断是否相等,即可实现简单的刷题功能。
Python默认不支持直接打开doc文件并读写,但是可以打开docx文件,但是docx文件必须是经过Word程序制作或转换而来的。如果文件太多,一个一个手动转化太麻烦,就要使用程序对文件批量转化,使用win32com模块可以使用此功能。
话不多说,放码!(部分思路在代码中注释):
首先批量将doc转化为Python能够打开并读写的docx文档:
#!/usr/bin/envpython #-*-coding:utf-8-*- #File:批量将doc转换为docx.py #Author:roohom #Date:2018/9/170017 ''' 使用Word批量将doc转化为docx -调用win32com,打开Word应用程序 -打开doc -保存成docx -关闭word -转入下一个doc并重复上述操作 ''' fromwin32comimportclientaswc defdoSaveAas(): word=wc.Dispatch('Word.Application') #延时5秒钟,防止由于系统配置原因还没打开Word就进行下一步程序 #time.sleep(5) doc=word.Documents.Open(r'{0}'.format(word_name))#目标路径下的文件 doc.SaveAs(r'{0}'.format(word_docx_name),16)#转化后路径下的文件,16表示docx格式 doc.Close() word.Quit() if__name__=='__main__': k=1 i=3 j=3 whileTrue: word_name="D:\学习区\Python\python二级考试试题\选择题\python二级考试试题{0}.doc".format(i) word_docx_name="D:\学习区\Python\python二级考试试题\选择题\python二级考试试题{0}".format(j) doSaveAas() i+=1 j+=1 print("已完成{0}个word从doc到docx的转换".format(k)) k+=1
结果是这个样子的:
再进行我们的正题,开始刷题:
#!/usr/bin/envpython #-*-coding:utf-8-*- #File:MyDemo.py #Author:roohom #Date:2018/9/170017 ''' 刷题脚本 -python对文件读写等操作的强大功能 -使用docx模块对docx文档进行读写 -python不支持直接打开并读取word文档,因此需要使用方法将doc转化为docx,方法详见doc_to_docx.py -原理 -打开经转化后的docx文档,并逐行读文件内容 -判断是否读到“正确内容”语句 -是,设置用户输入,提示输入用户的答案 -否,继续读操作 -比较用户的答案与正确答案是否一样 -是,输出正确提示 -否,输出错误提示 -继续下一题,重复上述操作 -拓展延伸 -可以在程序主入口处设置用户输入,输入用户想要打开的路径、文件,程序根据文件名、路径等进行上述操作 -可以根据用户输入情况设置加分减分,并根据全部答案情况,分析错误题目,后续将错题重修整理收集,反馈给用户 ''' importdocx ''' 字符串比较的一种麻烦方法: defcomparison(a,b): ib=0 foriainrange(len(a)): iford(a[ia:ia+1])-ord(b[ib:ib+1])==0: ib=ib+1 ifib==len(b): print('你的答案正确!') else: print('你的答案错误!') break ''' defcomparison(a,b): ifa==b: print("你的答案正确!") else: print("你的答案错误!") if__name__=='__main__': file=docx.Document(r"D:\学习区\Python\python二级考试试题\选择题\python二级考试试题01.docx") print("==================全国计算机二级考试之Python刷题==================") forpinfile.paragraphs: m=p.text if"正确答案:"inm: ans=input("请输入你的答案:") a="正确答案:{0}".format(ans) print(a) b=m print(b) comparison(a,b) print() print("==================全国计算机二级考试之Python刷题==================") else: print(m)
结果是这个样子的:
以上这篇Python使用docx模块实现刷题功能代码就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。