python题库刷题训练软件_Python使用docx模块实现刷题功能代码

起由:

前一阵子想要刷一刷国二Python的题库,千方百计找到题库之后,打开一个个word文档,发现一题一题阅读很麻烦,而且答案就在题目的下面,阅读题目的时候想自己做出题目却又总能不经意看到答案,甚烦!遂开始敲代码,我要一题一题做,还不能看见答案。

着手:

word文档是这样的:

20200213111231.jpg

观察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

结果是这个样子的:

20200213111245.jpg

再进行我们的正题,开始刷题:

#!/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)

结果是这个样子的:

20200213111255.jpg

以上这篇Python使用docx模块实现刷题功能代码就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值