将题目与答案整合到一起的 python 代码

比如原先 word 文档里的内容是:
一、选择题(每小题2分)
1.算法的计算量的大小称为计算的( )。 【北京邮电大学2000 二、3 (20/8分)】
A.效率 B.复杂性 C.现实性 D.难度
2.算法的时间复杂度取决于( )。  【中科院计算所 1998 二、1 (2分)】
A.问题的规模 B.待处理数据的初态 C.A和B  D.都不是
4.一个算法应该是( )。【中山大学 1998 二、1(2分)】
A.程序 B.问题求解步骤的描述
C.要满足五个基本特性 D.A和C.
5.下面关于算法说法错误的是( )【南京理工大学 2000 一、1(1.5分)】
A.算法最终必须由计算机程序实现
B.为解决某问题的算法同为该问题编写的程序含义是相同的
C. 算法的可行性是指指令不能有二义性 D. 以上几个都是错误的

  1. 下面说法错误的是( )【南京理工大学 2000 一、2 (1.5分)】
    (1)算法原地工作的含义是指不需要任何额外的辅助空间
    (2)在相同的规模n下,复杂度O(n)的算法在时间上总是优于复杂度O(2n)的算法
    (3)所谓时间复杂度是指最坏情况下,估算算法执行时间的一个上界
    (4)同一个算法,实现语言的级别越高,执行效率就越低
    A.(1) B.(1),(2) C.(1),(4) D.(3)
    7.从逻辑上可以把数据结构分为( )两大类。【武汉交通科技大学 1996 一 、4(2分)】
    A.动态结构、静态结构 B.顺序结构、链式结构
    C.线性结构、非线性结构 D.初等结构、构造型结构
    8.以下与数据的存储结构无关的术语是( )。【北方交通大学 2000 二、1(2分)】
    A.循环队列 B. 链表 C. 哈希表 D. 栈
    9.以下数据结构中,哪一个是线性结构( )?【北方交通大学 2001 一、1(2分)】
    A.广义表 B. 二叉树 C. 稀疏矩阵 D. 串
    10.以下那一个术语与数据的存储结构无关?( )【北方交通大学 2001 一、2(2分)】
    A.栈 B. 哈希表 C. 线索树 D. 双向链表
    11.在下面的程序段中,对x的赋值语句的频度为( )【北京工商大学 2001 一、10(3分)】
    FOR i:=1 TO n DO
    FOR j:=1 TO n DO
    x:=x+1;
    A. O(2n) B.O(n) C.O(n2) D.O(log2n)
    12.程序段 FOR i:=n-1 DOWNTO 1 DO
    FOR j:=1 TO i DO
    IF A[j]>A[j+1]
    THEN A[j]与A[j+1]对换;
    其中 n为正整数,则最后一行的语句频度在最坏情况下是( )
    A. O(n) B. O(nlogn) C. O(n3) D. O(n2) 【南京理工大学1998一、1(2分)】
    13.以下哪个数据结构不是多型数据类型( )【中山大学 1999 一、3(1分)】
    A.栈 B.广义表 C.有向图 D.字符串
    14.以下数据结构中,( )是非线性数据结构【中山大学 1999 一、4】
    A.树 B.字符串 C.队 D.栈
  2. 下列数据中,( )是非线性数据结构。【北京理工大学 2001 六、1(2分)】
    A.栈 B. 队列 C. 完全二叉树 D. 堆
    16.连续存储设计时,存储单元的地址( )。【中山大学 1999 一、1(1分)】
    A.一定连续 B.一定不连续 C.不一定连续 D.部分连续,部分不连续
    17.以下属于逻辑结构的是( )。【西安电子科技大学应用 2001一、1】
    A.顺序表 B. 哈希表 C.有序表 D. 单链表

答案:
1.B 2.C 3.B 4.D 5.C 6.C 7.D 8.D 9.A 10.C 11.D 4.D 5.A 6.C 7.A 8.C

经过以下代码整理, 可以生成后面格式的文本。

from docx import Document
from docx.shared import Inches
import re
import io

def process_questions(doc):
    questions = []
    answers = []
    images = []
    question_start = False
    answer_start = False
    current_question = None

    for i, para in enumerate(doc.paragraphs):
        if '选择题' in para.text or '判断题' in para.text:
            question_start = True
            answer_start = False
        elif '答案' in para.text:
            question_start = False
            answer_start = True
        elif question_start:
            if para.text.split('.', 1)[0].isdigit():
                current_question = para.text.split('.', 1)[1]
                questions.append([current_question])
            elif para.text.split('. ', 1)[0].isdigit():
                current_question = para.text.split('. ', 1)[1]
                questions.append([current_question])
            else:
                # 用正则表达式找到所有的选项, 更准确地匹配选项
                options = re.split(r'(A[..][^B-D]+)|(B[..][^A,C-D]+)|(C[..][^A-B,D]+)|(D[..][^A-C]+)|(E[..][^A-D]+)|(F[..][^A-E]+)|(G[..][^A-F]+)', para.text)
                options = [option for option in options if option and not option.isspace() and len(option) > 1]
                questions[-1].extend(options)
        elif answer_start:
            print(para.text)
            # 用正则表达式找到所有的答案,允许题号和答案之间有空格
            line_answers = re.findall(r'\d+[..]\s*(\w+)', para.text)
            print(line_answers)
            answers.extend(line_answers)

        # Check if the paragraph contains an image
        for rel in doc.part.rels.values():
            if "image" in rel.reltype:
                for run in para.runs:
                    if run._r.getchildren():
                        for child in run._r.getchildren():
                            if '{http://schemas.openxmlformats.org/drawingml/2006/main}blip' in child.tag:
                                images.append((i, rel.rel_id))

    return questions, answers, images

def modify_questions(doc, questions, answers, images):
    question_counter = 1
    image_counter = 0
    for i, question_parts in enumerate(questions):
        # Check if there is an image before this question
        while image_counter < len(images) and images[image_counter][0] < i:
            rel_id = images[image_counter][1]
            image_data = old_doc.part.rels[rel_id].rel.element.image_part.blob
            image_stream = io.BytesIO(image_data)
            doc.add_picture(image_stream)
            image_counter += 1

        if i < len(answers):
            answer = answers[i].strip().upper()
            if len(answer) > 1:
                question_type = '[多选题]'
            else:
                question_type = '[单选题]'
            question_line = str(question_counter) + '、' + question_parts[0] + '( ' + answer + ' )' + question_type + ' [2分]'
            doc.add_paragraph(question_line)
            for option in question_parts[1:]:
                doc.add_paragraph(option)
            doc.add_paragraph('难易度:2')
            doc.add_paragraph('解析:')
            doc.add_paragraph('知识点:数据结构概述')
            doc.add_paragraph('标签:数据结构概述')
            doc.add_paragraph('课程名称:数据结构')
            doc.add_paragraph('习题用途:通用题')
            doc.add_paragraph('\n')
            question_counter += 1  # Increment the question counter

    # Add any remaining images
    while image_counter < len(images):
        rel_id = images[image_counter][1]
        image_data = old_doc.part.rels[rel_id].rel.element.image_part.blob
        image_stream = io.BytesIO(image_data)
        doc.add_picture(image_stream)
        image_counter += 1

old_doc = Document('1数据结构概述.docx')
questions, answers, images = process_questions(old_doc)
new_doc = Document()
modify_questions(new_doc, questions, answers, images)
new_doc.save('output.docx')

1、算法的计算量的大小称为计算的( )。 【北京邮电大学2000 二、3 (20/8分)】 ( B )[单选题] [2分]
A.效率
B.复杂性
C.现实性
D.难度
难易度:2
解析:
知识点:数据结构概述
标签:数据结构概述
课程名称:数据结构
习题用途:通用题

2、算法的时间复杂度取决于( )。  【中科院计算所 1998 二、1 (2分)】 ( C )[单选题] [2分]
A.问题的规模
B.待处理数据的初态
C.A和B  
D.都不是
难易度:2
解析:
知识点:数据结构概述
标签:数据结构概述
课程名称:数据结构
习题用途:通用题

3、一个算法应该是( )。【中山大学 1998 二、1(2分)】( B )[单选题] [2分]
A.程序
B.问题求解步骤的描述
C.要满足五个基本特性
D.A和C
难易度:2
解析:
知识点:数据结构概述
标签:数据结构概述
课程名称:数据结构
习题用途:通用题

4、下面关于算法说法错误的是( )【南京理工大学 2000 一、1(1.5分)】( D )[单选题] [2分]
A.算法最终必须由计算机程序实现
B.为解决某问题的算法同为该问题编写的程序含义是相同的
C. 算法的可行性是指指令不能有二义性
D. 以上几个都是错误的
难易度:2
解析:
知识点:数据结构概述
标签:数据结构概述
课程名称:数据结构
习题用途:通用题

5、下面说法错误的是( )【南京理工大学 2000 一、2 (1.5分)】( C )[单选题] [2分]
(1)算法原地工作的含义是指不需要任何额外的辅助空间
(2)在相同的规模n下,复杂度O(n)的算法在时间上总是优于复杂度O(2n)的算法
(3)所谓时间复杂度是指最坏情况下,估算算法执行时间的一个上界
(4)同一个算法,实现语言的级别越高,执行效率就越低
A.(1)
B.(1),(2)
C.(1),(4)
D.(3)
难易度:2
解析:
知识点:数据结构概述
标签:数据结构概述
课程名称:数据结构
习题用途:通用题

6、从逻辑上可以把数据结构分为( )两大类。【武汉交通科技大学 1996 一 、4(2分)】( C )[单选题] [2分]
A.动态结构、静态结构
B.顺序结构、链式结构
C.线性结构、非线性结构
D.初等结构、构造型结构
难易度:2
解析:
知识点:数据结构概述
标签:数据结构概述
课程名称:数据结构
习题用途:通用题

7、以下与数据的存储结构无关的术语是( )。【北方交通大学 2000 二、1(2分)】( D )[单选题] [2分]
A.循环队列
B. 链表
C. 哈希表
D. 栈
难易度:2
解析:
知识点:数据结构概述
标签:数据结构概述
课程名称:数据结构
习题用途:通用题

8、以下数据结构中,哪一个是线性结构( )?【北方交通大学 2001 一、1(2分)】( D )[单选题] [2分]
A.广义表
B. 二叉树
C. 稀疏矩阵
D. 串
难易度:2
解析:
知识点:数据结构概述
标签:数据结构概述
课程名称:数据结构
习题用途:通用题

9、以下那一个术语与数据的存储结构无关?( )【北方交通大学 2001 一、2(2分)】( A )[单选题] [2分]
A.栈
B. 哈希表
C. 线索树
D. 双向链表
难易度:2
解析:
知识点:数据结构概述
标签:数据结构概述
课程名称:数据结构
习题用途:通用题

10、在下面的程序段中,对x的赋值语句的频度为( )【北京工商大学 2001 一、10(3分)】( C )[单选题] [2分]
FOR i:=1 TO n DO
FOR j:=1 TO n DO
x:=x+1;
A. O(2n)
B.O(n)
C.O(n2)
D.O(log2n)
难易度:2
解析:
知识点:数据结构概述
标签:数据结构概述
课程名称:数据结构
习题用途:通用题

11、程序段 FOR i:=n-1 DOWNTO 1 DO
FOR j:=1 TO i DO
IF A[j]>A[j+1]
THEN A[j]与A[j+1]对换;
其中 n为正整数,则最后一行的语句频度在最坏情况下是( ) ( D )[单选题] [2分]
A. O(n)
B. O(nlogn)
C. O(n3)
D. O(n2)
难易度:2
解析:
知识点:数据结构概述
标签:数据结构概述
课程名称:数据结构
习题用途:通用题

12、以下哪个数据结构不是多型数据类型( )【中山大学 1999 一、3(1分)】( D )[单选题] [2分]
A.栈
B.广义表
C.有向图
D.字符串
难易度:2
解析:
知识点:数据结构概述
标签:数据结构概述
课程名称:数据结构
习题用途:通用题

13、以下数据结构中,( )是非线性数据结构【中山大学 1999 一、4】( A )[单选题] [2分]
A.树
B.字符串
C.队
D.栈
难易度:2
解析:
知识点:数据结构概述
标签:数据结构概述
课程名称:数据结构
习题用途:通用题

14、下列数据中,( )是非线性数据结构。【北京理工大学 2001 六、1(2分)】( C )[单选题] [2分]
A.栈
B. 队列
C. 完全二叉树
D. 堆
难易度:2
解析:
知识点:数据结构概述
标签:数据结构概述
课程名称:数据结构
习题用途:通用题

15、连续存储设计时,存储单元的地址( )。【中山大学 1999 一、1(1分)】( A )[单选题] [2分]
A.一定连续
B.一定不连续
C.不一定连续
D.部分连续,部分不连续
难易度:2
解析:
知识点:数据结构概述
标签:数据结构概述
课程名称:数据结构
习题用途:通用题

16、以下属于逻辑结构的是( )。【西安电子科技大学应用 2001一、1】( C )[单选题] [2分]
A.顺序表
B. 哈希表
C.有序表
D. 单链表
难易度:2
解析:
知识点:数据结构概述
标签:数据结构概述
课程名称:数据结构
习题用途:通用题

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容