马原刷题工具

2023-11-03

选择题库文件word后,就能开始刷题了。
导入题库时会自动生成一个docx文件和json文件,想要重新导入就删除json文件。
题库下载:点我下载
要安装的库:pywin32, python-docx

"""
@author: Bre Athy
@contact: https://www.zhihu.com/people/you-yi-shi-de-hu-xi
@productware: PyCharm
@file: 刷题.py
@time: 2020/1/1 22:28
"""
# 要安装的库:pywin32, python-docx
from docx import Document
from win32com.client import Dispatch as DPT
import os, re, json, copy, random

def main():
    print("导入题库前请先关闭word!")
    wordpath = input("请输入题库word文档的位置:")
    if os.path.exists(os.path.splitext(wordpath)[0]+".json"):
        with open(os.path.splitext(wordpath)[0] + ".json", "r") as fp:
            Qs = json.load(fp)
    else:
        if os.path.splitext(wordpath)[1] == ".doc":
            print("检测到文件格式为doc,正在转为docx")
            word = DPT("Word.Application")
            doc = word.Documents.Open(wordpath)
            wordpath += "x"
            doc.SaveAs(wordpath, 12)
            doc.Close()
            word.Quit()
            print("转格式成功,文件存储为",wordpath)

        word = Document(wordpath)
        i = 1
        Qs = []
        Q = {}
        mcq = False
        if input("是否导入多选题(Y/N)?").upper() == "y":mcq = True
        for par in word.paragraphs:

            # 处理answer的函数,添加到列表中
            def parseresult(regex, content, item, over = False, answer = False):
                result = re.match(regex, content)
                if result:
                    Q[item] = result.group(1).strip()
                    if answer:
                        if len(Q[item])>1 and mcq:
                            Qs.append(copy.deepcopy(Q))
                            Q.clear()
                    if over:
                        Qs.append(copy.deepcopy(Q))
                        # print(Q)
                        Q.clear()

            if par.paragraph_format.alignment == 1:
                if "多选题" not in par.text:
                    print("导入"+par.text)
                i = 1
            else:
                result = re.match(".*?(\d+)"+r"[\..]"+"(.*)",par.text)
                if result:
                    Q={
                        "Item": result.group(1),
                        "Question" : result.group(2)
                    }
                    i += 1
                parseresult(".*\(A\)(.*)", par.text, "A")
                parseresult(".*\(B\)(.*)", par.text, "B")
                parseresult(".*\(C\)(.*)", par.text, "C")
                parseresult(".*\(D\)(.*)", par.text, "D")
                parseresult(".*\(B\)(.*)", par.text, "B")
                parseresult(".*\(A\)(.*)\(B", par.text, "A")
                parseresult(".*\(B\)(.*)\(C", par.text, "B")
                parseresult(".*\(C\)(.*)\(D", par.text, "C")
                parseresult(".*A\.(.*)", par.text, "A")
                parseresult(".*B\.(.*)", par.text, "B")
                parseresult(".*C\.(.*)", par.text, "C")
                parseresult(".*D\.(.*)", par.text, "D")
                parseresult(".*A\.(.*?)B\.", par.text, "A")
                parseresult(".*B\.(.*?)C\.", par.text, "B")
                parseresult(".*C\.(.*?)D\.", par.text, "C")
                parseresult("答.*?[::].*?(\w+).*", par.text, "Answer", answer=True)
                parseresult("答.*?[::].*?(\w+).*知", par.text, "Answer", answer=True)
                parseresult(".*?知.*:(.*)", par.text, "knowledge", over=True)
        with open(os.path.splitext(wordpath)[0] + ".json", "w") as fp:
            json.dump(Qs, fp)
    print("题库导入完成!")
    result = input("1、随机出题\n2、顺序出题\n请选择:")
    print("******************** 按下回车进入下一题 ********************")

    # 取出一道题
    def getQ(Q):
        input()

        def pprint(des, item):
            if item in Q.keys():
                print(des, Q[item])


        if len(Q["Answer"]) == 1:
            if ("A" in Q["Answer"]) or ("B" in Q["Answer"]) or ("C" in Q["Answer"]) or ("D" in Q["Answer"]):
                print("******************** 单选题 ********************")
            else:
                print("******************** 判断题 ********************")
        else:
            print("******************** 多选题 ********************")

        if "Item" not in Q.keys():
            return None
        print(str(Q["Item"]) + ". " + Q["Question"])
        pprint("A.", "A")
        pprint("B.", "B")
        pprint("C.", "C")
        pprint("D.", "D")

        if input("请选择:").upper() == Q["Answer"]:
            print("正确!")
        else:
            pprint("错误!正确答案:", "Answer")
        pprint("知识点:", "knowledge")


    if result == "2":
        for Q in Qs:
            getQ(Q)
    elif result == "1":
        while True:
            getQ(random.choice(Qs))
    else:
        print("未选择,自动退出!")



if __name__ == "__main__":
    main()

第一次导入比较慢,第二次就打开就很快了了:
在这里插入图片描述
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

马原刷题工具 的相关文章

  • Java 数字补零

    一共六位数字 不足数字前补零 int num 123 String lkm String format 0 6 d num
  • 垃圾大学python小题

    Python程序设计 课程 实验报告四 字符串与正则表达式 文章如果太长请直接复制到sublime text 软件里进行关键字搜索 一 实验目的和要求 理解字符串编码格式 熟练掌握字符串的概念和各种用法 掌握Python标准库string的
  • 带你了解软件版本号的命名规则

    1 常见软件的版本号命名 软件 升级过程 说明 Linux Kernel 0 0 1 1 0 0 2 6 32 3 0 18 若用 X Y Z 表示 则偶数 Y 表示稳定版本 奇数 Y 表示开发版本 Windows Windows 98 W
  • win10 超级终端

    win10 超级终端 链接 https pan baidu com s 1tkc5EKwHkXC3xtm0BijWyA 提取码 u94q
  • 服务器虚拟化 —— 集群服务器 —— 分布式 —— 云服务

    一 服务器虚拟化技术 是下面集群服务器 云服务的技术基石 将服务器的物理资源抽象成逻辑资源 让一台服务器变成几台甚至上百台 很少见啊 相互隔离的虚拟服务器 我们不再受限于物理上的界限 而是让CPU 内存 磁盘 I O等硬件变成可以动态管理的
  • css3 --- 实现动画线条运动效果实例集合

    CSS3实现动画线条运动效果实例集合 一 laoyuan 2016 12 20 标签 css3 阅读 5 157 在我们日常的开发中 有时候有的图片 布局块需要加一下边框运动效果 对于这些效果 我们可以使用CSS3动画属性animation
  • 谷歌浏览器启动后,图标变成空白解决办法

    谷歌浏览器启动后 图标变成空白 如下图 解决方法 新建一个文本文档 把如下代码复制进去 并保存 修改这个文本文档的后缀名改为 bat 点击运行即可 taskkill f im explorer exeattrib h i userprofi
  • 动物识别专家系统(Java实现已开源)

    动物识别专家系统 产生式系统 问题定义 系统实现 规则 事实和产生式的表示 类的设计 匹配顺序 推理机 结果演示 源代码 产生式系统 规则库 规则库是用于描述相应领域内知识的产生式集合 它是产生式系统求解问题的基础 其中对领域知识表达的完整
  • 解决百度文库复制问题 非VIP也能复制文字

    目录 前言 方法1 百度文库搜索功能 方法2 百度文库翻译接口 方法3 查看html的innerText 前言 百度的产品非常多 但是如果没有VIP 那么使用起来的用户体验无异于粪池蝶泳 这是不好的 今天来解决百度文库的复制问题 有些时候
  • 隐私政策

    本应用尊重并保护所有使用服务用户的个人隐私权 为了给您提供更准确 更有个性化的服务 本应用会按照本隐私权政策的规定使用和披露您的个人信息 但本应用将以高度的勤勉 审慎义务对待这些信息 除本隐私权政策另有规定外 在未征得您事先许可的情况下 本
  • 马原刷题工具

    选择题库文件word后 就能开始刷题了 导入题库时会自动生成一个docx文件和json文件 想要重新导入就删除json文件 题库下载 点我下载 要安装的库 pywin32 python docx author Bre Athy contac
  • K8s学习笔记二:Ubuntu安装minikube以及K8s简单体验

    Ubuntu安装minikube官方文档看这里 完成Docker十分钟了解Docker 我的Docker学习笔记 和kubectlUbuntu安装kubectl的下载安装后 就可以进行minikube的安装了 它能够帮助我们在本地非常容易的
  • 深入理解Java中的字符串驻留机制

    引言 在Java编程中 字符串是最常用的数据类型之一 而Java的字符串驻留 intern 机制则是字符串处理中一个重要且经常被忽视的话题 本文将带您深入探讨Java中字符串驻留机制的原理和影响因素 什么是字符串驻留机制 字符串驻留机制是指
  • 记网易面试总结

    最近进行了一次网易的社招面试 目前结果未知 但是从网易面试中我还是有一些体会 总结如下 作为非计算机专业的程序员来说 如果要进大厂 数据结构与算法是一定要补的 适度刷下leetcode中的算法题 大厂都好这一口 不要不信邪 我就以身试法了一
  • Java List<Map<String, Object>> 排序

    name key值 List
  • java字符串判空失败

    那你就快放弃使用 equals lkm 或 lkm isEmpty 进行判空吧 最牛逼判空方法 StringUtils isEmpty lkm 判空失败还有一种可能 基本用什么方法判空都会失败 使用String value 进行转换的判空
  • org.apache.poi.ss.usermodel.Cell.setCellValue(Ljava/time/LocalDateTime;)V

    java 导出功能 出现错误的原因是 实体中存在日期 而导出的时候Excel无法转换日期类型 解决方法 在实体中将日期类型转换为String类型 ColumnWidth 25 ExcelProperty value 计划开始日期 index
  • 获取任意月份天数

    获取月份天数 import java text ParseException import java text SimpleDateFormat import java util Calendar public class demo2 pu
  • 通过lombok减少重复劳动

    lombok 是什么 lombok是一个java开发工具 能帮助我们减少大量的重复劳动 lombok能帮助我们做什么 lombok提供了大量的注解 只要添加了这些注解 lombok就能自动完成很多代码 举个例子 我们在写java的POJO时
  • eclipse的全局替换快捷键

    Ctrl H 一 选择需要替换的内容 二 快捷键Ctrl H 选择 File Search gt Replace 三 替换新内容

随机推荐

  • UART和SPI简介

    UART 即通用异步收发器 是一种通用的串行 异步通信总线 该总线有两种数据线 可以实现数据的发送和接收 在嵌入式系统中常用于主机与辅助设备之间的通信 通信基础 并行和串行 并行通信 串行通信 单工通信 双工通信 半双工 发送和接收不可以同
  • c++观察者模式

    观察者模式 1 观察者模式简介 观察者模式也叫发布 订阅模式 模型 视图模式 源 监听器模式以及从属者模式 观察者模式定义了对象之间的一对多依赖关系 使得每当一个对象状态发生改变时 其相关依赖对象皆得到通知并被自动更新 2 实例讲解 假如张
  • wsl linux 安装

    1 首先确保windwos的操作系统 win 10 我的系统版本Microsoft Windows 版本 10 0 17134 285 2 开启 适用于linux的windows子系统 在 控制面板 程序 程序和功能 中 3 下载linux
  • 刚刚微软的3月安全更新中,这几个安全漏洞值得注意

    近日 安全专家建议IT团队应优先修补两个零日漏洞 一个是微软Outlook的认证机制 另一个是web标记的绕过 这两个漏洞是微软在其3月补丁星期二安全更新中披露的74个安全漏洞的一部分 在一篇博文中 Automox的研究人员建议企业在24小
  • 获取map的长度、map与list的区别

    获取map的长度 map与list的区别 1 首先看一下map和list有何区别 List 是存储单列数据的集合 存储的数据是有序并且是可以重复的 Map 存储双列数据的集合 通过键值对存储数据 存储 的数据是无序的 Key值不能重复 va
  • TCP协议三次握手,四次挥手

    TCP建立连接的过程叫做握手 握手需要在客户端和服务器端之间交换三个TCP报文段 称之为三次握手 TCP断开连接的过程叫做挥手 即在客户端和服务器端之间交换四个TCP报文段 称之为四次挥手 下面是一次完整的TCP连接过程 上图中对于发送SY
  • echart 点击事件

    以柱状图为例 点击单个柱形上 myChart off click 在渲染点击事件之前先清除点击事件 一定要加上否则会重复加载先前的点击事件 myChart on click function params console log 获取点击的
  • 内核dma_cache_maint介绍

    搞idm internal DMA 模块时 看到数据从主芯片传输到WiFi芯片之前 会有一个idm invalid cache的动作 该函数里封装着dma cache maint 这也就是我们平时经常说的刷cache 那这个内核函数作用是怎
  • Python随机生成企业及统一社会信用代码

    import random import string 随机生成企业名称 def generate company name prefix ABC XYZ ACME BEST TOP suffix Corp Inc Ltd LLC retu
  • 免费AI视频换脸工具-roop安装教程

    工具介绍 roop是一款使用python开发的深度AI视频换脸工具 不过目前工具没有开箱即用 需要一点点的python开发命令知识 不过官方也提供文档步骤 建议使用python 3 10 安装完必须的包即可 安装步骤 1 必备的工具环境 自
  • 【深度学习】手写数字识别及神经网络基本模型

    2021 10 7 学习日记 手写数字识别及神经网络基本模型 1 概述 张量 tensor 是数字的容器 是矩阵向任意维度的推广 其维度称为轴 axis 深度学习的本质是对张量做各种运算处理 其分层几乎总是通过神经网络 neural net
  • 【k8s】Kubernetes存储之 StatefulSet 控制器通过 Headless Service 管理Pod

    一 StatefulSet 控制器简介 官方网址 StatefulSet 是用来管理有状态应用的工作负载 API 对象 StatefulSet 用来管理 Deployment 和扩展一组 Pod 并且能为这些 Pod 提供序号和唯一性保证
  • uni-app自定义底部tabbar

    1 新建custom tab bar目录 并分别创建 js json wxml wxss index json component true index wxml
  • 一阶同余算法,模拟随机变量,筛选法,合成法,方差减少技术,蒙特卡洛积分,控制变量法,统计实验

    第一章 0 1 上均匀随机数的产生 一阶线性同余算法 思想 Wn a W0 c m 其中a称为乘数 W0为初始值 c为增量 m称为模数 当a 0时为和同余法 当c 0时为乘同余法 c 0时为混合同余法 乘数 增量和模数的选取可以多种多样 只
  • PCI配置空间简介

    转自 作为自己学习笔记PCI配置空间简介 腾讯云开发者社区 腾讯云 tencent com https cloud tencent com developer article 1199972 from 15425 一 PCI配置空间简介 P
  • Android : 读取assets目录下的json文件

    public class AssetsFileUtil 读取assets目录下的json文件 param context 上下文 param fileName 文件名称 return public static String getJson
  • 公司挖来一个阿里Java大神,生产环境故障调优很溜

    目录 线上系统是如何运行的 CPU 是如何并发运行多个线程的 线程太多会导致什么样的后果 经常听说的 CPU 使用率和负载到底是什么 如何通过 top 命令来查看 CPU 使用率和负载 今天给大家分享一个知识点 就是平时我们线上服务器部署的
  • HTTP请求中的传参方式form data、 request payload、query string parameters三者对比

    目录 一 GET请求 Query String Parameters 二 POST请求 2 1 FormData 2 2 Request Payload 补充 Post请求总结 HTTP请求中不同的请求方式和设置不同的Content Typ
  • Qt for Android:自定义安卓Application和Activity

    Demo 链接 https github com gongjianbo HelloQtAndroid git 1 前言 安卓的 Application 类相当于 Qt QApplication 维护应用程序全局状态 Application文
  • 马原刷题工具

    选择题库文件word后 就能开始刷题了 导入题库时会自动生成一个docx文件和json文件 想要重新导入就删除json文件 题库下载 点我下载 要安装的库 pywin32 python docx author Bre Athy contac