Python中怎么利用docx模块实现一个刷题功能

Python中怎么利用docx模块实现一个刷题功能,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

创新互联是专业的犍为网站建设公司,犍为接单;提供网站设计制作、成都做网站,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行犍为网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!

word文档是这样的:

观察word内容,每道题目的题目内容和题目答案都是一样的格式,包括缩进、字体等等,那么就可以使用Python对文件的读操作,浏览文档的内容,在适当的内容区域设置输入,将输入与答案进行判断是否相等,即可实现简单的刷题功能。

Python默认不支持直接打开doc文件并读写,但是可以打开docx文件,但是docx文件必须是经过Word程序制作或转换而来的。如果文件太多,一个一个手动转化太麻烦,就要使用程序对文件批量转化,使用win32com模块可以使用此功能。

话不多说,放码!(部分思路在代码中注释):

首先批量将doc转化为Python能够打开并读写的docx文档:

#!/usr/bin/env python# -*- coding: utf-8 -*-# File : 批量将doc转换为docx.py# Author: roohom# Date : 2018/9/17 0017'''使用Word批量将doc转化为docx  - 调用win32com,打开Word应用程序  - 打开doc  - 保存成docx  - 关闭word  - 转入下一个doc并重复上述操作'''from win32com import client as wcdef doSaveAas():  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  while True:    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/env python# -*- coding: utf-8 -*-# File : MyDemo.py# Author: roohom# Date : 2018/9/17 0017'''刷题脚本  - python对文件读写等操作的强大功能    - 使用docx模块对docx文档进行读写      - python不支持直接打开并读取word文档,因此需要使用方法将doc转化为docx,方法详见doc_to_docx.py  - 原理    - 打开经转化后的docx文档,并逐行读文件内容    - 判断是否读到“正确内容”语句      - 是,设置用户输入,提示输入用户的答案      - 否,继续读操作    - 比较用户的答案与正确答案是否一样      - 是,输出正确提示      - 否,输出错误提示    - 继续下一题,重复上述操作  - 拓展延伸     - 可以在程序主入口处设置用户输入,输入用户想要打开的路径、文件,程序根据文件名、路径等进行上述操作     - 可以根据用户输入情况设置加分减分,并根据全部答案情况,分析错误题目,后续将错题重修整理收集,反馈给用户'''import docx'''字符串比较的一种麻烦方法:def comparison(a, b):  ib=0  for ia in range(len(a)):    if ord(a[ia:ia+1])-ord(b[ib:ib+1])==0:      ib=ib+1      if ib==len(b):        print('你的答案正确!')    else:      print('你的答案错误!')      break'''def comparison(a, b):  if a == b :    print("你的答案正确!")  else:    print("你的答案错误!")if __name__ == '__main__':  file = docx.Document(r"D:\学习区\Python\python二级考试试题\选择题\python二级考试试题01.docx")  print("==================全国计算机二级考试之Python刷题==================")  for p in file.paragraphs:    m = p.text    if "正确答案: " in m:      ans = input("请输入你的答案:")      a = "正确答案: {0} ".format(ans)      print(a)      b = m      print(b)      comparison(a, b)      print()      print("==================全国计算机二级考试之Python刷题==================")    else:      print(m)

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注创新互联行业资讯频道,感谢您对创新互联的支持。


分享文章:Python中怎么利用docx模块实现一个刷题功能
网站网址:http://azwzsj.com/article/jjhdgh.html