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机器学习理论与实战(二)决策树
Jan 19 Python
python 实现将字典dict、列表list中的中文正常显示方法
Jul 06 Python
win8下python3.4安装和环境配置图文教程
Jul 31 Python
Win10下python 2.7.13 安装配置方法图文教程
Sep 18 Python
python 使用 requests 模块发送http请求 的方法
Dec 09 Python
基于Django框架的权限组件rbac实例讲解
Aug 31 Python
python 内置函数汇总详解
Sep 16 Python
PyTorch 解决Dataset和Dataloader遇到的问题
Jan 08 Python
Python ArgumentParse的subparser用法说明
Apr 20 Python
升级keras解决load_weights()中的未定义skip_mismatch关键字问题
Jun 12 Python
keras分类模型中的输入数据与标签的维度实例
Jul 03 Python
总结几个非常实用的Python库
Jun 26 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中动态显示签名和ip原理
2007/03/28 PHP
thinkPHP查询方式小结
2016/01/09 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
2017/11/14 PHP
php中如何执行linux命令详解
2018/11/06 PHP
Git命令之分支详解
2021/03/02 PHP
js 浮动层菜单收藏
2009/01/16 Javascript
window.event快达到全浏览器支持了,以后使用就方便了
2011/11/30 Javascript
Javascript闭包(Closure)详解
2015/05/05 Javascript
JavaScript实现添加、查找、删除元素
2015/07/02 Javascript
JAVASCRIPT代码编写俄罗斯方块网页版
2015/11/26 Javascript
JS实现的倒计时效果实例(2则实例)
2015/12/23 Javascript
JavaScript实现审核流程状态的动态显示进度条
2017/03/15 Javascript
React-Native实现ListView组件之上拉刷新实例(iOS和Android通用)
2017/07/11 Javascript
使用JavaScript实现一个小程序之99乘法表
2017/09/21 Javascript
jQuery实现鼠标滑过商品小图片上显示对应大图片功能【测试可用】
2018/04/27 jQuery
vue实现公告栏文字上下滚动效果的示例代码
2020/06/16 Javascript
[11:01]2014DOTA2西雅图邀请赛 冷冷带你探秘威斯汀
2014/07/08 DOTA
[02:50]【扭转乾坤,只此一招】DOTA2永雾林渊版本开启新篇章
2020/12/22 DOTA
详解详解Python中writelines()方法的使用
2015/05/25 Python
Python开发如何在ubuntu 15.10 上配置vim
2016/01/25 Python
Python3实现Web网页图片下载
2016/01/28 Python
MySQL适配器PyMySQL详解
2017/09/20 Python
Python编程使用tkinter模块实现计算器软件完整代码示例
2017/11/29 Python
Python微信公众号开发平台
2018/01/25 Python
Python中最大递归深度值的探讨
2019/03/05 Python
python数据预处理方式 :数据降维
2020/02/24 Python
利用4行Python代码监测每一行程序的运行时间和空间消耗
2020/04/22 Python
HTML5 Geolocation API的正确使用方法
2018/12/04 HTML / CSS
亚马逊中国官方网站:amazon.cn
2017/05/25 全球购物
美国在线奢侈品寄售商店:Luxury Garage Sale
2018/08/19 全球购物
英国领先的在线旅游和休闲零售商:lastminute.com
2019/01/23 全球购物
会计实习生自我鉴定
2013/12/12 职场文书
2014年卫生监督工作总结
2014/12/09 职场文书
Golang全局变量加锁的问题解决
2021/05/08 Golang
Python打包exe时各种异常处理方案总结
2021/05/18 Python
CDPR谈《巫师》新作用虚幻5原因 称不会为Epic独占
2022/04/06 其他游戏