Python使用docx模塊實(shí)現(xiàn)刷題功能代碼
起由:
前一陣子想要刷一刷國(guó)二Python的題庫(kù),千方百計(jì)找到題庫(kù)之后,打開一個(gè)個(gè)word文檔,發(fā)現(xiàn)一題一題閱讀很麻煩,而且答案就在題目的下面,閱讀題目的時(shí)候想自己做出題目卻又總能不經(jīng)意看到答案,甚煩!遂開始敲代碼,我要一題一題做,還不能看見答案。
著手:
word文檔是這樣的:

觀察word內(nèi)容,每道題目的題目?jī)?nèi)容和題目答案都是一樣的格式,包括縮進(jìn)、字體等等,那么就可以使用Python對(duì)文件的讀操作,瀏覽文檔的內(nèi)容,在適當(dāng)?shù)膬?nèi)容區(qū)域設(shè)置輸入,將輸入與答案進(jìn)行判斷是否相等,即可實(shí)現(xiàn)簡(jiǎn)單的刷題功能。
Python默認(rèn)不支持直接打開doc文件并讀寫,但是可以打開docx文件,但是docx文件必須是經(jīng)過Word程序制作或轉(zhuǎn)換而來的。如果文件太多,一個(gè)一個(gè)手動(dòng)轉(zhuǎn)化太麻煩,就要使用程序?qū)ξ募哭D(zhuǎn)化,使用win32com模塊可以使用此功能。
話不多說,放碼?。ú糠炙悸吩诖a中注釋):
首先批量將doc轉(zhuǎn)化為Python能夠打開并讀寫的docx文檔:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# File : 批量將doc轉(zhuǎn)換為docx.py
# Author: roohom
# Date : 2018/9/17 0017
'''
使用Word批量將doc轉(zhuǎn)化為docx
- 調(diào)用win32com,打開Word應(yīng)用程序
- 打開doc
- 保存成docx
- 關(guān)閉word
- 轉(zhuǎn)入下一個(gè)doc并重復(fù)上述操作
'''
from win32com import client as wc
def doSaveAas():
word = wc.Dispatch('Word.Application')
#延時(shí)5秒鐘,防止由于系統(tǒng)配置原因還沒打開Word就進(jìn)行下一步程序
#time.sleep(5)
doc = word.Documents.Open(r'{0}'.format(word_name)) # 目標(biāo)路徑下的文件
doc.SaveAs(r'{0}'.format(word_docx_name), 16) # 轉(zhuǎn)化后路徑下的文件,16表示docx格式
doc.Close()
word.Quit()
if __name__ == '__main__':
k = 1
i = 3
j = 3
while True:
word_name = "D:\學(xué)習(xí)區(qū)\Python\python二級(jí)考試試題\選擇題\python二級(jí)考試試題{0}.doc".format(i)
word_docx_name = "D:\學(xué)習(xí)區(qū)\Python\python二級(jí)考試試題\選擇題\python二級(jí)考試試題{0}".format(j)
doSaveAas()
i += 1
j += 1
print("已完成{0}個(gè)word從doc到docx的轉(zhuǎn)換".format(k))
k += 1
結(jié)果是這個(gè)樣子的:

再進(jìn)行我們的正題,開始刷題:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# File : MyDemo.py
# Author: roohom
# Date : 2018/9/17 0017
'''
刷題腳本
- python對(duì)文件讀寫等操作的強(qiáng)大功能
- 使用docx模塊對(duì)docx文檔進(jìn)行讀寫
- python不支持直接打開并讀取word文檔,因此需要使用方法將doc轉(zhuǎn)化為docx,方法詳見doc_to_docx.py
- 原理
- 打開經(jīng)轉(zhuǎn)化后的docx文檔,并逐行讀文件內(nèi)容
- 判斷是否讀到“正確內(nèi)容”語句
- 是,設(shè)置用戶輸入,提示輸入用戶的答案
- 否,繼續(xù)讀操作
- 比較用戶的答案與正確答案是否一樣
- 是,輸出正確提示
- 否,輸出錯(cuò)誤提示
- 繼續(xù)下一題,重復(fù)上述操作
- 拓展延伸
- 可以在程序主入口處設(shè)置用戶輸入,輸入用戶想要打開的路徑、文件,程序根據(jù)文件名、路徑等進(jìn)行上述操作
- 可以根據(jù)用戶輸入情況設(shè)置加分減分,并根據(jù)全部答案情況,分析錯(cuò)誤題目,后續(xù)將錯(cuò)題重修整理收集,反饋給用戶
'''
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('你的答案錯(cuò)誤!')
break
'''
def comparison(a, b):
if a == b :
print("你的答案正確!")
else:
print("你的答案錯(cuò)誤!")
if __name__ == '__main__':
file = docx.Document(r"D:\學(xué)習(xí)區(qū)\Python\python二級(jí)考試試題\選擇題\python二級(jí)考試試題01.docx")
print("==================全國(guó)計(jì)算機(jī)二級(jí)考試之Python刷題==================")
for p in file.paragraphs:
m = p.text
if "正確答案: " in m:
ans = input("請(qǐng)輸入你的答案:")
a = "正確答案: {0} ".format(ans)
print(a)
b = m
print(b)
comparison(a, b)
print()
print("==================全國(guó)計(jì)算機(jī)二級(jí)考試之Python刷題==================")
else:
print(m)
結(jié)果是這個(gè)樣子的:

以上這篇Python使用docx模塊實(shí)現(xiàn)刷題功能代碼就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python Pillow 圖像處理庫(kù)詳解(常用Pillow函數(shù)及其參數(shù))
Pillow,原名PIL(Python Imaging Library),是一個(gè)功能強(qiáng)大的Python圖像處理庫(kù),支持多種格式,提供豐富的圖像操作功能,如旋轉(zhuǎn)、縮放、顏色轉(zhuǎn)換等,以及易于使用的API,Pillow支持廣泛的圖像文件格式,并提供圖像過濾、繪制等功能2024-09-09
dpn網(wǎng)絡(luò)的pytorch實(shí)現(xiàn)方式
今天小編就為大家分享一篇dpn網(wǎng)絡(luò)的pytorch實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-01-01
基于python連接oracle導(dǎo)并出數(shù)據(jù)文件
這篇文章主要介紹了基于python連接oracle導(dǎo)并出數(shù)據(jù)文件,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04
詳解Python實(shí)現(xiàn)多進(jìn)程異步事件驅(qū)動(dòng)引擎
本篇文章主要介紹了詳解Python實(shí)現(xiàn)多進(jìn)程異步事件驅(qū)動(dòng)引擎,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-08-08
python爬取天氣數(shù)據(jù)的實(shí)例詳解
在本篇文章里小編給大家整理的是一篇關(guān)于python爬取天氣數(shù)據(jù)的實(shí)例詳解內(nèi)容,有興趣的朋友們學(xué)習(xí)下。2020-11-11

