前言
在众多考试准备过程中,我们经常会接触到由机构提供的题库,用于自学和复习。然而,这些题库往往庞大而繁杂,完全记住它们几乎是不可能的任务,尤其是在面临机考时,题目的随机性更增加了复习的难度。为了解决这个问题,我编写了一个程序来帮助整理和搜索这些题目。在此声明,此工具仅供学习使用,请勿用于不当目的。
技术栈
我们已经提前获取了相关的文档,因此可以跳过数据获取的步骤。
数据处理是这个工具的核心部分。在此项目中,我们的目标是快速而准确地检索问题和对应答案。为此,我们创建了一个字典结构 questions_answers
,其中问题作为键,答案作为值。通过这种方式,我们可以通过输入问题来迅速找到对应的答案。
以下是数据处理的核心代码:
from docx import Document
import json
def extract_questions_answers(doc_path):
doc = Document(doc_path)
questions_answers = {}
current_question = None
current_answer = ""
for para in doc.paragraphs:
text = para.text.strip()
if text.startswith(tuple(str(i) + "." for i in range(1, 100))): # 识别问题
if current_question:
questions_answers[current_question] = current_answer.strip()
current_question = text
current_answer = ""
elif text.startswith("答案:"): # 识别答案
current_answer += text + "\n"
if current_question:
questions_answers[current_question] = current_answer.strip()
return questions_answers
这段代码首先识别文档中的问题和答案,然后将其保存在一个字典中,以便后续快速检索。
为了方便地搜索题库,我使用了Tkinter库来创建一个简单的图形界面应用程序。用户可以在输入框中输入问题的关键词,程序将返回匹配的答案。
import tkinter as tk
from tkinter import messagebox
import json
import sys
import os
# 确定应用的路径
if getattr(sys, 'frozen', False):
application_path = os.path.dirname(sys.executable)
else:
application_path = os.path.dirname(os.path.abspath(__file__))
json_path = os.path.join(application_path, 'questions_and_answers.json')
# 从JSON文件加载问题和答案
with open(json_path, "r", encoding="utf-8") as f:
content = json.load(f)
def search_text():
search_query = entry.get().lower()
for question, answer in content.items():
if search_query in question.lower():
messagebox.showinfo("y", answer)
return
messagebox.showinfo("n", "n")
# 创建主窗口
root = tk.Tk()
root.title("fata_error")
# 输入框
entry = tk.Entry(root, width=100)
entry.pack()
# 搜索按钮
search_button = tk.Button(root, text="do", command=search_text)
search_button.pack()
# 主循环
root.mainloop()
这个程序直观且易于使用,即使是对编程不太了解的用户也能轻松上手。
为了使程序更加易于分发和使用,我使用了PyInstaller来将Python脚本打包成单个可执行文件。这样,用户无需担心环境配置的问题,只需运行.exe文件即可。
pip install pyinstaller
#可以在terminal中下载,也可以在cmd中下载
pyinstaller --onefile --add-data "questions_and_answers.json;." search.py
通过这种方式,我们可以将程序打包并分发给需要的用户,为他们的学习提供便利。
这里的–add-data选项用于包含非代码文件。在Windows中,使用分号;作为路径分隔符,在Linux或macOS中,您应该使用冒号:。
获取可执行文件:PyInstaller将在dist目录下创建search.exe。您可以将这个.exe文件和.json文件一起分发给用户。
运行的时候建议在cmd中运行,在外面运行失败会闪退,cmd中运行失败会有报错,我们要根据报错,找到问题