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+pyqt实现右下角弹出框
Oct 26 Python
浅谈Python实现2种文件复制的方法
Jan 19 Python
python输入整条数据分割存入数组的方法
Nov 13 Python
对pandas读取中文unicode的csv和添加行标题的方法详解
Dec 12 Python
Python代码打开本地.mp4格式文件的方法
Jan 03 Python
python GUI库图形界面开发之PyQt5控件QTableWidget详细使用方法与属性
Feb 25 Python
python中matplotlib实现随鼠标滑动自动标注代码
Apr 23 Python
Python Django中间件使用原理及流程分析
Jun 13 Python
解决Keras中循环使用K.ctc_decode内存不释放的问题
Jun 29 Python
Python __slots__的使用方法
Nov 15 Python
分享一个python的aes加密代码
Dec 22 Python
Python编写冷笑话生成器
Apr 20 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
destoon实现商铺管理主页设置增加新菜单的方法
2014/06/26 PHP
8个PHP数组面试题
2015/06/23 PHP
四个常见html网页乱码问题及解决办法
2015/09/08 PHP
jQuery判断密码强度实现思路及代码
2013/04/24 Javascript
讨论html与javascript在浏览器中的加载顺序问题
2013/11/27 Javascript
jQuery EasyUI实现右键菜单变灰不可用效果
2015/09/24 Javascript
Nodejs基于LRU算法实现的缓存处理操作示例
2017/03/17 NodeJs
关于javascript获取内联样式与嵌入式样式的实例
2017/06/01 Javascript
Nodejs+angularjs结合multiparty实现多图片上传的示例代码
2017/09/29 NodeJs
利用vue开发一个所谓的数独方法实例
2017/12/21 Javascript
微信小程序实现弹出菜单
2018/07/19 Javascript
Vue v-for循环之@click点击事件获取元素示例
2019/11/09 Javascript
js实现时钟定时器
2020/03/26 Javascript
vue2.x数组劫持原理的实现
2020/04/19 Javascript
vue项目打包后请求地址错误/打包后跨域操作
2020/11/04 Javascript
[28:48]《真视界》- 2017年国际邀请赛
2017/09/27 DOTA
浅析Python中的序列化存储的方法
2015/04/28 Python
Tensorflow卷积神经网络实例进阶
2018/05/24 Python
Python 实现文件打包、上传与校验的方法
2019/02/13 Python
python os模块简单应用示例
2019/05/23 Python
Python使用LDAP做用户认证的方法
2019/06/20 Python
HTML5超炫酷粒子效果的进度条的实现示例
2019/08/23 HTML / CSS
HTML5 weui使用笔记
2019/11/21 HTML / CSS
美国知名的摄影器材销售网站:Adorama
2017/02/01 全球购物
澳大利亚礼品篮网站:Macarthur Baskets
2019/10/14 全球购物
简述数组与指针的区别
2014/01/02 面试题
天游软件面试
2013/11/23 面试题
心理学专业毕业生推荐信范文
2013/11/21 职场文书
大学运动会通讯稿
2014/01/28 职场文书
幼儿园大班毕业感言
2014/02/06 职场文书
群众路线党员个人整改措施
2014/10/27 职场文书
小学班级管理心得体会
2016/01/07 职场文书
将Python代码打包成.exe可执行文件的完整步骤
2021/05/12 Python
你喜欢篮球吗?Python实现篮球游戏
2021/06/11 Python
十大最强格斗系宝可梦,超梦X仅排第十,第二最重格斗礼仪
2022/03/18 日漫
基于Python实现将列表数据生成折线图
2022/03/23 Python