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中的实例方法、静态方法、类方法、类变量和实例变量浅析
Apr 26 Python
python机器学习理论与实战(五)支持向量机
Jan 19 Python
python使用suds调用webservice接口的方法
Jan 03 Python
Python设计模式之命令模式原理与用法实例分析
Jan 11 Python
python安装pywin32clipboard的操作方法
Jan 24 Python
python把1变成01的步骤总结
Feb 27 Python
Python 从subprocess运行的子进程中实时获取输出的例子
Aug 14 Python
Python使用Slider组件实现调整曲线参数功能示例
Sep 06 Python
python GUI库图形界面开发之PyQt5下拉列表框控件QComboBox详细使用方法与实例
Feb 27 Python
浅析Django 接收所有文件,前端展示文件(包括视频,文件,图片)ajax请求
Mar 09 Python
Python3爬虫中Selenium的用法详解
Jul 10 Python
python 如何调用远程接口
Sep 11 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的ASP防火墙
2006/10/09 PHP
PHP编程最快明白(第一讲 软件环境和准备工作)
2010/10/25 PHP
smarty表格换行实例
2014/12/15 PHP
js对象关系图 方便dom操作
2012/03/18 Javascript
javascript:FF/Chrome与IE动态加载元素的区别说明
2014/01/26 Javascript
关于javascript中dataset的问题小结
2015/11/16 Javascript
jquery实现树形菜单完整代码
2015/12/29 Javascript
MUI 上拉刷新/下拉加载功能实例代码
2017/04/13 Javascript
jQuery插件开发发送短信倒计时功能代码
2017/05/09 jQuery
使用jQuery.Pin垂直滚动时固定导航
2017/05/24 jQuery
Vuex利用state保存新闻数据实例
2017/06/28 Javascript
对于js垃圾回收机制的理解
2017/09/14 Javascript
vue初始化动画加载的实例
2018/09/01 Javascript
JavaScript构造函数原理及实现流程解析
2020/11/19 Javascript
[02:31]DOTA2帕克 英雄基础教程
2013/11/26 DOTA
[40:55]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#4Newbee VS Fnatic
2016/03/03 DOTA
python利用datetime模块计算时间差
2015/08/04 Python
python之DataFrame实现excel合并单元格
2021/02/22 Python
Python爬虫文件下载图文教程
2018/12/23 Python
Python3+PyInstall+Sciter解决报错缺少dll、html等文件问题
2019/07/15 Python
python字典的遍历3种方法详解
2019/08/10 Python
python3.7实现云之讯、聚合短信平台的短信发送功能
2019/09/26 Python
python 消除 futureWarning问题的解决
2019/12/25 Python
利用Python制作动态排名图的实现代码
2020/04/09 Python
python函数map()和partial()的知识点总结
2020/05/26 Python
法国体育用品商店:GO Sport
2019/10/23 全球购物
《湘夫人》教学反思
2014/02/21 职场文书
售后求职信范文
2014/03/15 职场文书
承诺书的格式范文
2014/03/28 职场文书
军训口号
2014/06/13 职场文书
2014年党员个人工作总结
2014/12/02 职场文书
2015年话务员工作总结
2015/04/29 职场文书
企业廉洁教育心得体会
2016/01/20 职场文书
《扇形统计图》教学反思
2016/02/17 职场文书
Python3.10的一些新特性原理分析
2021/09/15 Python
前端使用svg图片改色实现示例
2022/07/23 HTML / CSS