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网络编程学习笔记(八):XML生成与解析(DOM、ElementTree)
Jun 09 Python
python 远程统计文件代码分享
May 14 Python
Python3的urllib.parse常用函数小结(urlencode,quote,quote_plus,unquote,unquote_plus等)
Sep 18 Python
python+pygame简单画板实现代码实例
Dec 13 Python
详解Python3 中hasattr()、getattr()、setattr()、delattr()函数及示例代码数
Apr 18 Python
Python匿名函数/排序函数/过滤函数/映射函数/递归/二分法
Jun 05 Python
使用浏览器访问python写的服务器程序
Oct 10 Python
Python 3 使用Pillow生成漂亮的分形树图片
Dec 24 Python
python wav模块获取采样率 采样点声道量化位数(实例代码)
Jan 22 Python
python使用numpy中的size()函数实例用法详解
Jan 29 Python
Keras多线程机制与flask多线程冲突的解决方案
May 28 Python
Python中第三方库Faker的使用详解
Apr 02 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开发环境配置(MySQL数据库安装图文教程)
2010/04/28 PHP
php用正则表达式匹配中文实例详解
2013/11/06 PHP
javascript 图片上传预览-兼容标准
2009/06/01 Javascript
ExtJS GridPanel 根据条件改变字体颜色
2010/03/08 Javascript
javascript setAttribute, getAttribute 在不同浏览器上的不同表现
2010/08/05 Javascript
动态加载图片路径 保持JavaScript控件的相对独立性
2010/09/03 Javascript
JS/FLASH实现复制代码到剪贴板(兼容所有浏览器)
2013/05/27 Javascript
jquery列表拖动排列(由项目提取相当好用)
2014/06/17 Javascript
使用jQuery的easydrag插件实现可拖动的DIV弹出框
2016/02/19 Javascript
JS前向后瞻正则表达式定义与用法示例
2016/12/27 Javascript
Bootstrap实现渐变顶部固定自适应导航栏
2020/08/27 Javascript
基于JavaScript实现购物车功能
2017/02/07 Javascript
超简单的Vue.js环境搭建教程
2017/03/17 Javascript
详谈js对url进行编码和解码(三种方式的区别)
2017/08/16 Javascript
weex里Vuex state使用storage持久化详解
2017/09/09 Javascript
浅谈微信JS-SDK 微信分享接口开发(介绍版)
2018/08/15 Javascript
JavaScript数组去重的方法总结【12种方法,号称史上最全】
2019/02/28 Javascript
python列表与元组详解实例
2013/11/01 Python
跟老齐学Python之永远强大的函数
2014/09/14 Python
对于Python装饰器使用的一些建议
2015/06/03 Python
Python实现的彩票机选器实例
2015/06/17 Python
wx.CheckBox创建复选框控件并响应鼠标点击事件
2018/04/25 Python
Python 使用类写装饰器的小技巧
2018/09/30 Python
Python3实现对列表按元组指定列进行排序的方法分析
2018/12/22 Python
python针对mysql数据库的连接、查询、更新、删除操作示例
2019/09/11 Python
Python字符串hashlib加密模块使用案例
2020/03/10 Python
canvas实现图片镜像翻转的2种方式
2020/07/22 HTML / CSS
HearthSong官网:儿童户外玩具、儿童益智玩具
2017/10/16 全球购物
中专毕业生个人职业生涯规划
2014/02/19 职场文书
教师业务培训方案
2014/05/01 职场文书
业务员工作态度散漫检讨书
2014/11/02 职场文书
2015年销售人员工作总结
2015/04/07 职场文书
2019各种保证书范文
2019/06/24 职场文书
如何撰写创业策划书
2019/06/27 职场文书
C#连接ORACLE出现乱码问题的解决方法
2021/10/05 Oracle
Python创建SQL数据库流程逐步讲解
2022/09/23 Python