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字符串,数值计算
Oct 05 Python
python将类似json的数据存储到MySQL中的实例
Jul 12 Python
flask框架路由常用定义方式总结
Jul 23 Python
Python中typing模块与类型注解的使用方法
Aug 05 Python
Python学习笔记之Django创建第一个数据库模型的方法
Aug 07 Python
python 根据网易云歌曲的ID 直接下载歌曲的实例
Aug 24 Python
爬虫代理池Python3WebSpider源代码测试过程解析
Dec 20 Python
Python中SQLite如何使用
May 27 Python
浅谈django框架集成swagger以及自定义参数问题
Jul 07 Python
python 自动化偷懒的四个实用操作
Apr 11 Python
python3实现Dijkstra算法最短路径的实现
May 12 Python
python读取mnist数据集方法案例详解
Sep 04 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微信公众号开发(4)php实现自定义关键字回复
2016/12/15 PHP
JQuery中如何传递参数如click(),change()等具体实现
2013/04/28 Javascript
DIV始终居中的js代码
2014/02/17 Javascript
jQuery.holdReady()使用方法
2014/05/20 Javascript
解决ueditor jquery javascript 取值问题
2014/12/30 Javascript
JavaScript获取伪元素(Pseudo-Element)属性的方法技巧
2015/03/13 Javascript
JavaScript编写Chrome扩展实现与浏览器的交互及时间通知
2016/05/16 Javascript
Query常用DIV操作获取和设置长度宽度的实现方法
2016/09/19 Javascript
深入理解JS继承和原型链的问题
2016/12/17 Javascript
Node.js Express 框架 POST方法详解
2017/01/23 Javascript
纯JS单页面赛车游戏制作代码分享
2017/03/03 Javascript
详谈Angular路由与Nodejs路由的区别
2017/03/05 NodeJs
Javascript实现base64的加密解密方法示例
2017/06/27 Javascript
浅谈关于.vue文件中style的scoped属性
2017/08/19 Javascript
AngularJs 延时器、计时器实例代码
2017/09/16 Javascript
Angular客户端请求Rest服务跨域问题的解决方法
2017/09/19 Javascript
vuejs使用$emit和$on进行组件之间的传值的示例
2017/10/04 Javascript
jQuery实现获取table中鼠标click点击位置行号与列号的方法
2017/10/09 jQuery
快速解决vue在ios端下点击响应延时的问题
2018/08/27 Javascript
jquery+ajax实现上传图片并显示上传进度功能【附php后台接收】
2019/06/06 jQuery
vue 修改 data 数据问题并实时显示操作
2020/09/07 Javascript
python多重继承新算法C3介绍
2014/09/28 Python
利用python编写一个图片主色转换的脚本
2017/12/07 Python
Python实现的质因式分解算法示例
2018/05/03 Python
python如何爬取个性签名
2018/06/19 Python
Python3爬取英雄联盟英雄皮肤大图实例代码
2018/11/14 Python
关于不懂Chromedriver如何配置环境变量问题解决方法
2019/06/12 Python
python导包的几种方法(自定义包的生成以及导入详解)
2019/07/15 Python
Python使用matplotlib绘制三维参数曲线操作示例
2019/09/10 Python
python实现PCA降维的示例详解
2020/02/24 Python
Static Nested Class 和 Inner Class的不同
2013/11/28 面试题
班主任工作经验材料
2014/02/02 职场文书
百货商场楼层班组长竞聘书
2014/03/31 职场文书
我的中国梦演讲稿1000字
2014/08/19 职场文书
刑事上诉状(无罪)
2015/05/23 职场文书
golang 实现Location跳转方式
2021/05/02 Golang