Python生成随机试卷及答案

article/2025/6/21 17:06:13

前言

Python 是一种流行的编程语言,广泛用于数据分析。使用 Python 进行数据分析的一些主要优势包括:

  • 庞大而活跃的社区:Python 拥有庞大而活跃的用户和开发人员社区,这使得找到使用 Python 处理数据的支持和资源变得容易。
  • 丰富的库和工具:Python 拥有丰富的数据分析库和工具生态系统,包括用于数据操作、可视化和机器学习的库。
  • 高级且易于使用:Python 是一种高级编程语言,这意味着它易于阅读和编写。这使它成为数据分析的不错选择,因为它使您可以专注于数据和分析,而不是代码的低级细节。
  • 灵活性和互操作性:Python 是一种灵活的语言,可用于范围广泛的数据分析任务,从简单的数据探索到复杂的机器学习模型。它还可以与其他语言和系统互操作,这使得将 Python 集成到现有数据管道和工作流中变得容易。

Python 是数据分析的强大而流行的选择,因为它拥有庞大而活跃的社区、丰富的库和工具、高级且易于使用的语法以及灵活性和互操作性。

一、背景

本文章主要是描述如何使用Python从试题库中面抽取试题,生成的试卷每一份都不一样。

二、准备工作

1.安装Python3

下载地址:https://www.python.org/downloads/windows/

2.安装库

pip install python-docx

pip install xlrd

3.试题库.xlsx

开发程序前需要先收集试题,本文是将试题收集存放到Excel表中(如果题量比较大,可以存放到数据库中),格式如下:

选择题:

efd910635678235751d9b2cf3764e5e6.png

填空题/解答题/综合题:

dcd80bb2c869984cba53ad6243e02be4.png

三、代码

Test_question.py

# _*_ coding:utf-8 _*_
import random,xlrd,os
from docx import Document
from docx.shared import Inches,Pt
from docx.enum.text import WD_ALIGN_PARAGRAPH,WD_LINE_SPACING
from docx.oxml.ns import qn
from docx.shared import Inchesdef get_xlsx(sheet):"获取指定Excel数据"excel_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), '软件测试试题库.xlsx')  # 获取用例文件路径file = xlrd.open_workbook(excel_path)                                   # 打开excellist = []sheet = file.sheet_by_name(sheet)                                       # 获得指定sheet数据row_value1 =sheet.row_values(0)                                         # 获取第1行的标题nrows = sheet.nrows                                                     # 获取当前sheet行数ncols = sheet.ncols                                                     # 获取当前sheet列数for i in range(1, nrows):                                               # 从第2行遍历当前sheetrow = sheet.row_values(i)                                           # 获取行数据dict = {}                                                           # 创建空字典for j in range(0, ncols):                                           # 遍历sheet列,组成字典if row_value1[j] == '序号':dict[row_value1[j]] = int(row[j])else:dict[row_value1[j]] = row[j]                                # 从第一列开始,将每一列的数据与第1行的数据组成一个键值对,形成字典list.append(dict)                                                   # 将字典添加list中return listdef router_docx(choice1,choice2,choice3,choice5,choice6,choice7,paper_path,name):"生成网络通信方向试题及答案"docx1 = Document()docx2 = Document()docx1.styles['Normal'].font.name = '宋体'                                 #选择字体docx1.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), '宋体')  #默认字体docx1.styles['Normal'].font.size = Pt(11)                                #默认字号大小docx1.styles['Normal'].paragraph_format.space_before = Pt(0)             #默认段前间距docx1.styles['Normal'].paragraph_format.space_after = Pt(0)              #默认段后间距docx1.styles['Normal'].paragraph_format.line_spacing_rule = WD_LINE_SPACING.ONE_POINT_FIVE   #默认单倍行距sec = docx1.sections[0]                                                  # sections对应文档中的“节”sec.left_margin = Inches(1)                                              # 设置左页面边距sec.right_margin = Inches(1)                                             #设置右页面边距sec.top_margin = Inches(0.5)                                             # 设置上页面边距sec.bottom_margin = Inches(0.5)                                          #设置下页面边距p=docx1.add_paragraph()                                                  #添加段落run = p.add_run('软件测试(网络通信)方向试题(%s)' % name)                      #使用add_run添加文字run.font.name = '微软雅黑'                                                 #设置字体run._element.rPr.rFonts.set(qn('w:eastAsia'), '微软雅黑')                  #设置字体run.font.size = Pt(18)                                                   #字体大小设置p.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER                 #段落文字居中设置docx1.add_paragraph('【说明】')                                            # 添加段落文字docx1.add_paragraph('1.笔试时间为60分钟。')docx1.add_paragraph('2.请将答案写在答题卡上,且不允许在试题卷上做任何涂写和标记。')q=docx2.add_paragraph()                                                  #添加段落run = q.add_run('软件测试(网络通信)方向试题答案(%s)' % name)                   #使用add_run添加文字run.font.name = '微软雅黑'                                                 #设置字体run._element.rPr.rFonts.set(qn('w:eastAsia'), '微软雅黑')                  #设置字体run.font.size = Pt(18)                                                   #字体大小设置q.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER                 #段落文字居中设置p1 = docx1.add_paragraph()p1.paragraph_format.space_before = Pt(12)                                #设置段前间距docx2.add_paragraph('一、选择题')run = p1.add_run('一、选择题(每题3分共45分)')run.bold = True                                                          # 字体加粗list1=random.sample(range(0,len(choice1)-1),3)x=1for y in list1:docx1.add_paragraph(str(x)+'、'+choice1[y]['题目'])docx1.add_paragraph(choice1[y]['选项A'])docx1.add_paragraph(choice1[y]['选项B'])docx1.add_paragraph(choice1[y]['选项C'])p11=docx1.add_paragraph(choice1[y]['选项D'])p11.paragraph_format.space_after = Pt(12)                            #段后间距docx2.add_paragraph(str(x)+'、'+choice1[y]['答案'])x+=1list2=random.sample(range(0,len(choice2)-1),7)x=1for y in list2:docx1.add_paragraph(str(x+3)+'、'+choice2[y]['题目'])docx1.add_paragraph(choice2[y]['选项A'])docx1.add_paragraph(choice2[y]['选项B'])docx1.add_paragraph(choice2[y]['选项C'])p11=docx1.add_paragraph(choice2[y]['选项D'])p11.paragraph_format.space_after = Pt(12)                           docx2.add_paragraph(str(x+3)+'、'+choice2[y]['答案'])x+=1list3=random.sample(range(0,len(choice3)-1),5)x=1for y in list3:docx1.add_paragraph(str(x+10)+'、'+choice3[y]['题目'])docx1.add_paragraph(choice3[y]['选项A'])docx1.add_paragraph(choice3[y]['选项B'])docx1.add_paragraph(choice3[y]['选项C'])p11=docx1.add_paragraph(choice3[y]['选项D'])p11.paragraph_format.space_after = Pt(12)                    docx2.add_paragraph(str(x+10)+'、'+choice3[y]['答案'])x+=1p2 = docx1.add_paragraph()p2.paragraph_format.space_before = Pt(12)docx2.add_paragraph('二、填空题')run = p2.add_run('二、填空题(每题3分,共15分)')run.bold = Truelist2 = random.sample(range(0, len(choice5)-1), 5)i = 1for j in list2:docx1.add_paragraph(str(i) + '、' + choice5[j]['题目'])docx2.add_paragraph(str(i) + '、' + str(choice5[j]['答案']))i += 1p3 = docx1.add_paragraph()p3.paragraph_format.space_before = Pt(12)docx2.add_paragraph('三、简答题')run = p3.add_run('三、简答题(每题10分,共20分)')run.bold = Truelist3 = random.sample(range(0, len(choice6)-1), 2)n = 1for m in list3:docx1.add_paragraph(str(n) + '、' + choice6[m]['题目'])docx1.add_paragraph('\r')docx2.add_paragraph(str(n) + '、' + choice6[m]['答案'])n += 1p4 = docx1.add_paragraph()p4.paragraph_format.space_before = Pt(12)docx2.add_paragraph('四、综合题')run = p4.add_run('四、综合题(共20分)')run.bold = Truelist4 = random.randint(0, len(choice7)-1)docx1.add_paragraph('1、' + choice7[list4]['题目'])docx2.add_paragraph(choice7[list4]['答案'])docx1.save(os.path.join(paper_path, '网络通信试题(%s).docx' % name))              #保存试题docx2.save(os.path.join(paper_path, '网络通信试题答案(%s).docx' % name))           #保存答案def android_docx(choice1, choice2, choice4, choice5, choice6, choice8,paper_path,name):"""生成智能终端方向的试题"""docx1 = Document()docx2 = Document()docx1.styles['Normal'].font.name = '宋体'                                        #选择字体docx1.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), '宋体')         #默认字体docx1.styles['Normal'].font.size = Pt(11)                                       #默认字号大小docx1.styles['Normal'].paragraph_format.space_before = Pt(0)                    #默认段前间距docx1.styles['Normal'].paragraph_format.space_after = Pt(0)                     #默认段后间距docx1.styles['Normal'].paragraph_format.line_spacing_rule = WD_LINE_SPACING.ONE_POINT_FIVE   #默认单倍行距sec = docx1.sections[0]                                                         # sections对应文档中的“节”sec.left_margin = Inches(1)                                                     # 设置左页面边距sec.right_margin = Inches(1)                                                    #设置右页面边距sec.top_margin = Inches(0.5)                                                    # 设置上页面边距sec.bottom_margin = Inches(0.5)                                                 #设置下页面边距p=docx1.add_paragraph()                                                         #添加段落run = p.add_run('软件测试(智能终端)方向试题(%s)' % name)                             #使用add_run添加文字run.font.name = '微软雅黑'                                                        #设置字体run._element.rPr.rFonts.set(qn('w:eastAsia'), '微软雅黑')                         #设置字体run.font.size = Pt(18)                                                          #字体大小设置p.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER                        #段落文字居中设置docx1.add_paragraph('【说明】')                                                   # 添加段落文字docx1.add_paragraph('1.笔试时间为60分钟。')docx1.add_paragraph('2.请将答案写在答题卡上,且不允许在试题卷上做任何涂写和标记。')q = docx2.add_paragraph()                                                       # 添加段落run = q.add_run('软件测试(智能终端)方向试题答案(%s)' % name)                          # 使用add_run添加文字run.font.name = '微软雅黑'                                                        # 设置字体run._element.rPr.rFonts.set(qn('w:eastAsia'), '微软雅黑')                         # 设置字体run.font.size = Pt(18)                                                          # 字体大小设置q.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER                        # 段落文字居中设置p1 = docx1.add_paragraph()p1.paragraph_format.space_before = Pt(12)                                       #设置段前间距docx2.add_paragraph('一、选择题')run = p1.add_run('一、选择题(每题3分共45分)')run.bold = True                                                                 # 字体加粗list1=random.sample(range(0,len(choice1)-1),3)x=1for y in list1:docx1.add_paragraph(str(x)+'、'+choice1[y]['题目'])docx1.add_paragraph(choice1[y]['选项A'])docx1.add_paragraph(choice1[y]['选项B'])docx1.add_paragraph(choice1[y]['选项C'])p11=docx1.add_paragraph(choice1[y]['选项D'])p11.paragraph_format.space_after = Pt(12)                                  #段后间距docx2.add_paragraph(str(x)+'、'+choice1[y]['答案'])x+=1list2=random.sample(range(0,len(choice2)-1),7)x=1for y in list2:docx1.add_paragraph(str(x+3)+'、'+choice2[y]['题目'])docx1.add_paragraph(choice2[y]['选项A'])docx1.add_paragraph(choice2[y]['选项B'])docx1.add_paragraph(choice2[y]['选项C'])p11=docx1.add_paragraph(choice2[y]['选项D'])p11.paragraph_format.space_after = Pt(12)                  docx2.add_paragraph(str(x+3)+'、'+choice2[y]['答案'])x+=1list3=random.sample(range(0,len(choice4)-1),5)x=1for y in list3:docx1.add_paragraph(str(x+10)+'、'+choice4[y]['题目'])docx1.add_paragraph(choice4[y]['选项A'])docx1.add_paragraph(choice4[y]['选项B'])docx1.add_paragraph(choice4[y]['选项C'])p11=docx1.add_paragraph(choice4[y]['选项D'])p11.paragraph_format.space_after = Pt(12)                   docx2.add_paragraph(str(x+10)+'、'+choice4[y]['答案'])x+=1p2 = docx1.add_paragraph()p2.paragraph_format.space_before = Pt(12)docx2.add_paragraph('二、填空题')run = p2.add_run('二、填空题(每题3分,共15分)')run.bold = Truelist2 = random.sample(range(0, len(choice5)-1), 5)i = 1for j in list2:docx1.add_paragraph(str(i) + '、' + choice5[j]['题目'])docx2.add_paragraph(str(i) + '、' + str(choice5[j]['答案']))i += 1p3 = docx1.add_paragraph()p3.paragraph_format.space_before = Pt(12)docx2.add_paragraph('三、简答题')run = p3.add_run('三、简答题(每题10分,共20分)')run.bold = Truelist3 = random.sample(range(0, len(choice6)-1), 2)n = 1for m in list3:docx1.add_paragraph(str(n) + '、' + choice6[m]['题目'])docx1.add_paragraph('\r')docx2.add_paragraph(str(n) + '、' + choice6[m]['答案'])n += 1p4 = docx1.add_paragraph()p4.paragraph_format.space_before = Pt(12)docx2.add_paragraph('四、综合题')run = p4.add_run('四、综合题(共20分)')run.bold = Truelist4 = random.randint(0, len(choice8)-1)docx1.add_paragraph('1、' + choice8[list4]['题目'])docx2.add_paragraph(choice8[list4]['答案'])docx1.save(os.path.join(paper_path, '智能终端试题(%s).docx' % name))docx2.save(os.path.join(paper_path, '智能终端试题答案(%s).docx' % name))def main():paper_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), '试卷')   #试卷存放路径if not os.path.exists(paper_path):os.mkdir(paper_path)choice1 = get_xlsx('计算机基础')                                                 #从excel中获得试题choice2 = get_xlsx('测试基础')choice3 = get_xlsx('选择题(网络通信)')choice4 = get_xlsx('选择题(智能终端)')choice5 = get_xlsx('填空题')choice6 = get_xlsx('简答题')choice7 = get_xlsx('综合题(网络通信)')choice8 = get_xlsx('综合题(智能终端)')for i in range(1,4):                                                           #同时生成3份试卷及答案router_docx(choice1, choice2, choice3, choice5, choice6, choice7, paper_path, i)android_docx(choice1, choice2, choice4, choice5, choice6, choice8, paper_path, i)if __name__ == "__main__":main()

  


http://chatgpt.dhexx.cn/article/2XTQVXi4.shtml

相关文章

试卷模板 html,试卷模板怎么转换a4Word

1 回答 2021-04-11 浏览:0 分类:办公入门 回答:方法/步骤 1 新建一个Word文档,单击“页面布局”-“页边距”,然后进行如下设置。设置纸张方向为横向。 2 考试的纸张为B4纸,单击“页面布局”-“纸张大小”&a…

用条码标签打印软件制作试卷上的条形码

条码在学校试卷上的使用,使条码直接走进了广大青少年的视野,对于条形码技术的发展与应用起到了积极的推进作用。 那么,如何制作试卷上的条形码? 所需设备: 一、Label mx通用条码标签设计系统; (下载地址:http://www.labelmx.com/Products/Label/200807/2.html) 二、标签…

mathtype软件

MathType是一款专业的数学公式编辑器,兼容Office word,excel等700多种程序,用于编辑数学试卷、书籍、报刊、论文、幻灯演示等文档轻松输入各种复杂的数学公式和符号。文本链接审核不通过,只能试试图片分享了。这个软件亲测好用。

计算机考试试卷怎么做,雨课堂怎么新建试卷 雨课堂制作试题的方法

雨课堂是一款非常好用的教育类软件,大多数用户都会选择这款软件解决学业以及工作上的事情,小编近期了解到某些用户不知道怎么新建试卷,想知道的赶快来看看下面的文章吧! 1、首先需要先将安装雨课堂软件,小编以WPS为列子…

Excel制作选择题试卷,Python快速汇总成绩

Excel是最常用的办公软件,对于繁琐、重复的操作,可以借助Python提升效率,节约时间。 一、Excel编辑选择题。 1、Excel试卷基本格式。 A列、C列、D列合并相关单元格。 B列列宽最大,自动换行。以B6:B10为例,题目一行&…

wps如何设置试卷密封线_如何使用word制作试卷密封线

Word是个功能强大的字处理软件,许多功能能够收到令人意想不到的效果,尤其是巧妙的运用一些命令能够达到令其他软件望尖莫及的地步。 比如说,经常用蜡纸给学生打印试卷,一般情况下,卷头(包括姓名、准考证号、学校等)都放…

标准化计算机考试软件,考易标准化电子试卷制作系统

考易标准化电子试卷制作系统是一款简单实用的电子试卷制作设计工具,软件可以设置试题文件、试卷答案、音频文件、提示或讲解文件、试卷评语、试卷信息等,无需数据库支持,轻轻松松设计电子考卷,支持将试卷制作为EXE,功能…

自制计算机考试系统,出试卷的软件

❶ 怎么在电脑上制作一张考试卷,用什么软件来作啊 可以通过Word在线制作指定格式的试卷;管鲍在线考试系统,在线考试,学习更加方便,当然也可以将试卷导出为指定的格式(如:A3格式),导出的试卷格式也可自定义 …

计算机考试试卷怎么做,试卷编写软件

⑴ 有没有免费的题库软件,可以自己编辑题库,录入试题,也能生成试卷的软件,有的话发邮箱,重财富悬赏 esoho 有开源的,可以上传视频课件或文档,支持编辑试题、在线考试;如果需要其他更…

Git本地仓库、版本库、工作区、暂存区、分支、远程仓库分别是什么?

1.本地仓库 我们在工作区对代码操作完后,把它提交到本地仓库,最后push到远程仓库。本地仓库存储位置位于.git 的隐藏文件夹中。 2.远程仓库 我们提交到网络上面的仓库,就是远程仓库。 3.工作区 当我们把下面这个路径通过git init 命令初始化…

如何删除Git本地仓库和删除GitHub上的Git远程仓库Repository

1.删除Git本地仓库 删除Git本地仓库的根本原理是删除“Git本地仓库”里面的根目录下面的隐藏文件夹“.git” (1)方法1:自己手动删除掉“Git本地仓库”里面的根目录下面的隐藏文件夹“.git”(如上图所示) &#xff08…

Git详解之本地仓库

文章目录 附加:Git指令大全1.创建版本库1.1.文本的编辑和提交 2.时光机穿梭2.1.版本回退2.2.工作区和暂存区2.3.修改2.3.1.管理修改2.3.2.撤销修改2.3.3.删除文件 在上一篇博客中已经要求大家到官网去下载Git,当你看这篇博文的时候你要打开Git Bash 。 你…

Git上传本地仓库到Github

如何上传本地已经创建好的项目到Github或Gitee呢。本文将简短的为您提供帮助。都是一步一步截图叙述。带截图的都是针对小白一步步引导。懂一点点点的,直接跳到文章结尾看命令。 首先需要在远端创建一个仓库,登录github右上角点击加号新建项目&#xff1…

Git初始化本地仓库

【1】创建一个文件夹:GitResp: 【2】打开Git终端: Git Bash Here: 进入以后先对字体和编码进行设置: 在Git中命令跟Linux是一样的: (1)查看git安装版本: (2&#xf…

4.git本地仓库操作(操作命令)

一、工作流程 Git本地操作的三个区域: 工作流程: 二、本地仓库操作 什么是仓库呢?仓库又名版本库,英文名repository,我们可以简单理解成是一个目录,用于存放代码的,这个目录里面的所有文件都可…

git本地仓库绑定远程仓库

1、在要新建本地仓库地址的位置打开git bash,并利用命令git init初始化仓库; 2、利用命令ssh-keygen -t ed25519 -C "your_emailexample.com"生成ssh密钥(这一步并不是必须的,但是如果不这么做的话每次提交都需要输入账…

Git本地仓库与远程仓库链接

前一段时间因为课程需要,所以学习了git的初步使用,说说我踩的雷,和浅谈一下使用方法把 首先要确保你的电脑上装了git,注册一个github账号,这就不说了 首先创建一个文件夹来当做你远程仓库在本地的映射 1.在文件夹空…

Git本地仓库内部基本结构

Git本地仓库(本文不涉及远程仓库)的内部结构简单如下图: 这是一个appengine项目,刚从远程仓库中clone出来。这个目录下,除了.git目录外的都算作工作区。.git目录下有很多东西,这里只挑简单的描述。 1.obje…

在IDEA中配置git本地仓库并提交远程仓库

首先需要先安装好git 1.下载并安装Git客户端→Git官网下载地址 2.需要有远程仓库账号(gitee或者GitHub都可以)。 先在IDEA中配置git file -> settings -> version control-> git (下边地址填写 git安装的路径中的git.exe的位置) 如果git安装…

如何搭建一个git本地仓库

第一步,右键 第二步,配置邮箱,和git用户名,这个用户名是本地的。可以随意起一个名字 实际上,我们配置的邮箱和用户名,会被记录到本地c盘目录下的一个叫.gitconfig的文件下 我们也可以通过git命令来查看配置…