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内置函数的用法实例教程
Sep 08 Python
浅谈python socket函数中,send与sendall的区别与使用方法
May 09 Python
Python3实战之爬虫抓取网易云音乐的热门评论
Oct 09 Python
python编程羊车门问题代码示例
Oct 25 Python
攻击者是如何将PHP Phar包伪装成图像以绕过文件类型检测的(推荐)
Oct 11 Python
用Python获取摄像头并实时控制人脸的实现示例
Jul 11 Python
python判断一个对象是否可迭代的例子
Jul 22 Python
numpy 返回函数的上三角矩阵实例
Nov 25 Python
python操作docx写入内容,并控制文本的字体颜色
Feb 13 Python
python GUI库图形界面开发之pyinstaller打包python程序为exe安装文件
Feb 26 Python
python实现梯度法 python最速下降法
Mar 24 Python
Python基础之变量的相关知识总结
Jun 23 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闭包(Closure)使用详解
2013/05/02 PHP
phpexcel导入excel数据使用方法实例
2013/12/24 PHP
PHP操作FTP类 (上传、下载、移动、创建等)
2016/03/31 PHP
PHP编程实现微信企业向用户付款的方法示例
2017/07/26 PHP
Thinkphp5.0 框架实现控制器向视图view赋值及视图view取值操作示例
2019/10/12 PHP
JQuery入门——移除绑定事件unbind方法概述及应用
2013/02/05 Javascript
JS中图片缓冲loading技术的实例代码
2013/08/29 Javascript
jquery事件与函数的使用介绍
2013/09/29 Javascript
javascript确认框的三种使用方法
2013/12/17 Javascript
基于jQuery实现文本框缩放以及上下移动功能
2014/11/24 Javascript
Jquery的基本对象转换和文档加载用法实例
2015/02/25 Javascript
jquery获取节点名称
2015/04/26 Javascript
在AngularJS中使用AJAX的方法
2015/06/17 Javascript
JS实现把鼠标放到链接上出现滚动文字的方法
2016/04/06 Javascript
js将json格式的对象拼接成复杂的url参数方法
2016/05/25 Javascript
vue.js实现仿原生ios时间选择组件实例代码
2016/12/21 Javascript
超详细动手搭建一个VuePress 站点及开启PWA与自动部署的方法
2019/01/27 Javascript
Vue scrollBehavior 滚动行为实现后退页面显示在上次浏览的位置
2019/05/27 Javascript
在nuxt中使用路由重定向的实例
2020/11/06 Javascript
[01:45:05]VGJ.T vs Newbee Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
web.py中调用文件夹内模板的方法
2014/08/26 Python
Python首次安装后运行报错(0xc000007b)的解决方法
2016/10/18 Python
Tensorflow 合并通道及加载子模型的方法
2018/07/26 Python
Python3实现的旋转矩阵图像算法示例
2019/04/03 Python
Pytorch保存模型用于测试和用于继续训练的区别详解
2020/01/10 Python
用Python 爬取猫眼电影数据分析《无名之辈》
2020/07/24 Python
如何Tkinter模块编写Python图形界面
2020/10/14 Python
pytorch 计算Parameter和FLOP的操作
2021/03/04 Python
CSS3 flex布局之快速实现BorderLayout布局
2015/12/03 HTML / CSS
俄罗斯金苹果网上化妆品和香水商店:Goldapple
2019/12/01 全球购物
给客户的道歉信
2014/01/13 职场文书
小小商店教学反思
2014/04/27 职场文书
湖南省召开党的群众路线教育实践活动总结大会报告
2014/10/21 职场文书
2014年采购工作总结
2014/11/20 职场文书
土地租赁协议书
2015/01/29 职场文书
2016七夕情人节广告语
2016/01/28 职场文书