起由: 前一阵子想要刷一刷国二Python的题库,千方百计找到题库之后,打开一个个word文档,发现一题一题阅读很麻烦,而且答案就在题目的下面,阅读题目的时候想自己做出题目却又总能不经意看到答案,甚烦!遂开始敲代码,我要一题一题做,还不能看见答案。 着手: word文档是这样的: 观察word内容,每道题目的题目内容和题目答案都是一样的格式,包括缩进、字体等等,那么就可以使用Python对文件的读操作,浏览文档的内容,在适当的内容区域设置输入,将输入与答案进行判断是否相等,即可实现简单的刷题功能。 Python默认不支持直接打开doc文件并读写,但是可以打开docx文件,但是docx文件必须是经过Word程序制作或转换而来的。如果文件太多,一个一个手动转化太麻烦,就要使用程序对文件批量转化,使用win32com模块可以使用此功能。 话不多说,放码!(部分思路在代码中注释): 首先批量将doc转化为Python能够打开并读写的docx文档: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | #!/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
|
结果是这个样子的: 再进行我们的正题,开始刷题: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | #!/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模块实现刷题功能代码就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。
|