基础语法实现Python试卷自动生成(未使用正则表达式)

编程要求

题库里有70个判断题,30个选择题。用python编写程序,从题库中随机选题,组成两套试卷。每套试卷有5个判断题,5个选择题。为每套试卷生成标准答案。

解题思想

1.首先读取 题库.docx 里面的内容
2.将选择和判断分别存放到两个列表list中
3.将判断和选择分别切片存放到各自list中
4.随机生成两套试卷,每套里面有5个判断,5个选择
5.将生成的题和答案切片,分别存放到两个word中

缺陷

需要手动在题库中加入分隔符,有待改善。
以及应该可以使用正则表达式来更加优化。

具体代码

import docx
import random

def getText(filename):
    '''
    读入题库
    :param filename: 题库位置
    :return: 题库具体内容
    '''
    doc = docx.Document(filename)
    fullText = []
    for para in doc.paragraphs:
        fullText.append(para.text)
        pass
    return '\n'.join(fullText)
    pass

def test_split(test,division):
    '''
    切片操作
    :param test: 被切列表
    :param division: 分隔符
    :return: 切后列表
    '''
    test_list=test.split(division)
    return  test_list
    pass

def creat_test(doc1,doc2):
    '''
    将随机的选择题和判断题以及对应的答案写入列表
    :param doc1: 试卷word
    :param doc2: 答案word
    :return:
    '''
    i=0
    j=0
    while i<5:
        test_judge_3 = test_judge_2[i].split('&')
        i+=1
        # 将原题号切片
        test_judge_4 = test_judge_3[0].split('、',1)
        # 为考题与答案加上序号
        doc1.add_paragraph('{}、{}'.format(i,test_judge_4[1]))
        doc2.add_paragraph('{}、{}'.format(i,test_judge_3[1]))
        pass
    while j<5:
        test_pick_3=test_pick_2[j].split('&')
        j+=1
        # 将原题号切片
        test_pick_4= test_pick_3[0].split('、',2)
        # 为考题与答案加上序号
        doc1.add_paragraph('{}、{}'.format(i+j, test_pick_4[1]))
        doc2.add_paragraph('{}、{}'.format(i+j, test_pick_3[1]))
        pass
    pass

# 1.读取文件
test_bank = getText('C:\\Users\93932\Desktop\python\题库.docx')

# 2.分割判断和选择
test_bank_1=test_split(test_bank, '#')
test_judge=test_bank_1[0]
test_pick=test_bank_1[1]

# 3.逐题分割判断和选择
test_judge_1=test_split(test_judge, '*')
test_pick_1=test_split(test_pick, '*')

# 4.随机生成5道判断 5道选择
test_judge_2=random.sample(test_judge_1, 5)
test_pick_2=random.sample(test_pick_1, 5)

# 5.分割试题和答案 并且生成word文档
doc1_1 = docx.Document()
doc1_2 = docx.Document()
doc2_1 = docx.Document()
doc2_2 = docx.Document()
doc1_1.add_paragraph('考试题1')
doc1_2.add_paragraph('答案1')
doc2_1.add_paragraph('考试题2')
doc2_2.add_paragraph('答案2')
creat_test(doc1_1, doc1_2)
creat_test(doc2_1, doc2_2)
doc1_1.save('C:\\Users\93932\Desktop\试卷1.docx')
doc1_2.save('C:\\Users\93932\Desktop\答案1.docx')
doc2_1.save('C:\\Users\93932\Desktop\试卷2.docx')
doc2_2.save('C:\\Users\93932\Desktop\答案2.docx')
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值