Python使用docx模块实现刷题功能代码


Posted in Python onFebruary 13, 2020

起由:

前一阵子想要刷一刷国二Python的题库,千方百计找到题库之后,打开一个个word文档,发现一题一题阅读很麻烦,而且答案就在题目的下面,阅读题目的时候想自己做出题目却又总能不经意看到答案,甚烦!遂开始敲代码,我要一题一题做,还不能看见答案。

着手:

word文档是这样的:

Python使用docx模块实现刷题功能代码

观察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 wc
 
def 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

结果是这个样子的:

Python使用docx模块实现刷题功能代码

再进行我们的正题,开始刷题:

#!/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模块实现刷题功能代码

以上这篇Python使用docx模块实现刷题功能代码就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中在脚本中引用其他文件函数的实现方法
Jun 23 Python
python利用matplotlib库绘制饼图的方法示例
Dec 18 Python
Python2.7读取PDF文件的方法示例
Jul 13 Python
CentOS7.3编译安装Python3.6.2的方法
Jan 22 Python
Python使用pylab库实现绘制直方图功能示例
Jun 01 Python
pyhanlp安装介绍和简单应用
Feb 22 Python
Python分析彩票记录并预测中奖号码过程详解
Jul 09 Python
Python 获取windows桌面路径的5种方法小结
Jul 15 Python
tensorflow2.0与tensorflow1.0的性能区别介绍
Feb 07 Python
python图形开发GUI库wxpython使用方法详解
Feb 14 Python
Python实现读取并写入Excel文件过程解析
May 27 Python
python线性插值解析
Jul 05 Python
Tensorflow训练MNIST手写数字识别模型
Feb 13 #Python
Python3 读取Word文件方式
Feb 13 #Python
解决Python import docx出错DLL load failed的问题
Feb 13 #Python
python求最大公约数和最小公倍数的简单方法
Feb 13 #Python
python圣诞树编写实例详解
Feb 13 #Python
python如何实现复制目录到指定目录
Feb 13 #Python
Python制作简易版小工具之计算天数的实现思路
Feb 13 #Python
You might like
php的SimpleXML方法读写XML接口文件实例解析
2014/06/16 PHP
PHP实现图片裁剪、添加水印效果代码
2014/10/01 PHP
php列出mysql表所有行和列的方法
2015/03/13 PHP
PHP函数用法详解【初始化、嵌套、内置函数等】
2020/06/02 PHP
关于viewport,Ext.panel和Ext.form.panel的关系
2009/05/07 Javascript
JavaScript 的继承
2011/10/01 Javascript
JQuery实现表格中相同单元格合并示例代码
2013/06/26 Javascript
jQuery实现限制textarea文本框输入字符数量的方法
2015/05/28 Javascript
详解js运算符单竖杠“|”与“||”的用法和作用介绍
2016/11/04 Javascript
Vue利用路由钩子token过期后跳转到登录页的实例
2017/10/26 Javascript
vue项目中用cdn优化的方法
2018/01/03 Javascript
一次记住JavaScript的6个正则表达式方法
2018/02/22 Javascript
vue.js与后台数据交互的实例讲解
2018/08/08 Javascript
js中apply()和call()的区别与用法实例分析
2018/08/14 Javascript
Vue js 的生命周期(看了就懂)(推荐)
2019/03/29 Javascript
JS严格模式原理与用法实例分析
2020/04/27 Javascript
JS实现简易贪吃蛇游戏
2020/08/24 Javascript
Python异常学习笔记
2015/02/03 Python
JSON Web Tokens的实现原理
2017/04/02 Python
详解python使用pip安装第三方库(工具包)速度慢、超时、失败的解决方案
2018/12/02 Python
python三方库之requests的快速上手
2019/03/04 Python
Python爬虫——爬取豆瓣电影Top250代码实例
2019/04/17 Python
Python3安装psycopy2以及遇到问题解决方法
2019/07/03 Python
python 如何将数据写入本地txt文本文件的实现方法
2019/09/11 Python
Python实现中值滤波去噪方式
2019/12/18 Python
Python+redis通过限流保护高并发系统
2020/04/15 Python
matplotlib基础绘图命令之imshow的使用
2020/08/13 Python
css3实例教程 一款纯css3实现的发光屏幕旋转特效
2014/12/07 HTML / CSS
详解background属性的8个属性值(面试题)
2020/11/02 HTML / CSS
美国一家专业的太阳镜网上零售商:Solstice太阳镜
2016/07/25 全球购物
心得体会开头
2014/01/01 职场文书
学校消防演习方案
2014/02/19 职场文书
四风查摆问题自查报告
2014/10/10 职场文书
上诉答辩状范文
2015/05/22 职场文书
初中毕业感言300字
2015/07/31 职场文书
深入理解redis中multi与pipeline
2021/06/02 Redis