2017年秋季学期软件工程第二次作业炜柒

1,操作数随机生成,包含整数和真分数

2,运算符的种类的顺序随机生成

3,能判断对错并计分

4,生成的题目数量可以控制

以及四个附加要求:

1,运算符的个数随机生成

2,根据题目难度分配分值

4,防止题目重复

首先考虑基本要求:根据用户输入的题目数量,随机生成字符串,打印出来就能得到一个题目,由于要与用户输入的答案比较,所以应当知道这个字符串的值是多少。而题目是操作数与操作符交错的,只要确定了操作符,然后插入随机的操作数就能得到一个题目。

考虑附加要求1:把运算符存在一个列表中,然后随机生成序号,取出对应的运算符就好

考虑附加要求2:用题目的长短(操作符的个数)和乘除法占的多少来衡量一个题目难易与否,把难度量化,根据难度分配分值,满分默认为100分

考虑附加要求4:把所有已生成的题目都存起来,每得到一个新题目,就到题库里去比,如果重复就重新生成一个新题目。

三,设计实现过程

基本功能点:

用户交互得到题目数量与运算范围:首先由用户决定需要多少题以及操作符的运算范围是多大,使程序的适用性更强

随机生成操作符:把所有的操作符都存在一个列表中,例如【‘+’,‘-’,‘*’,‘/’】,然后随机从中抽取。后来考虑到小学运算的难度,我调整了加减号和乘除号的比例,为2:1。即建立一个【‘+’,‘-’,‘+’,‘-’,‘*’,‘/’】列表,然后从中随机抽取操作符

随机生成操作数:首先获取一个在(1,2)中的随机整数,如果为1,则返回一个整数,如果为2,则返回一个真分数,保证了操作数的随机性。与调整操作符种类比例类似,可以调整操作数的范围来改变返回整数与真分数的比值。返回整数直接在操作数运算范围中随机得到一个就行,如果是返回真分数,可以获取两个随机数。python有一个Fraction类可以进行分数的数值运算和自动约分。

随机得到题目(包含运算符个数随机生成):首先在(1~10)中随机获取操作符的个数,这也确定了题目的长度。然后调用已经得到的随机获取操作符和随机获取操作数的函数,交错得到一道题目。

把题目写入txt文件中:每得到一道新题就写一道新题,便于后续查看与打印。当前只能写题,后续将开发把题目,参考答案和回答答案、每题的对错和对应的分数全部写入,即打印成绩单。

计算题目的答案:这部分困扰我最久。我把一道题目存在一个列表中,列表中的元素是操作数或者操作符。比如:

【‘5’,‘+’,‘1/2’,‘*’,‘4’,‘-’,‘2’】

在没有括号的情况下,乘除运算先于加减。于是我从左到右遍历这个列表,如果有乘除号,那么使用乘除号和前后的两个操作数进行一次乘除运算,把结果赋给前一个操作数,并删除操作符和后一个操作数:

【‘5’,‘+’,‘2’,‘-’,‘2’】

做完所有的乘除法后,就用前三个元素做加减运算,同样把值赋给前一个操作数,并删除操作符和下一个操作数:

【‘7’,‘-’,‘2’】

直到列表只剩最后一个元素:

【‘5’】

这个数就是表达式的答案。

但是我这种有一个很明显的缺点,就是无法处理包含括号的字符串运算。

题目判重:用一个列表存题,每生成一道题目就去题库中比较一次,如果不一样就添加到题库中,如果一样就重新随机生成。

根据用户输入判断答题对错:到这里已经得到了题目和答案,分别用两个列表存储。如果用户的输入与答案相符,输出“回答正确!”,反之输出“回答错误!”

根据题目难易分配分值:首先是量化难易度。回溯到随机操作符和操作数的时候,如果随机得到了一个加减号,则认为难度+1,乘除号,则难度+2;如果随机得到一个整数,则难度+1,真分数,则难度+1.5。在随机生成题目的时候,设置初始难度为0,每得到一个操作数和一个操作符就把难度累加起来,得到一个难度的判据。把难度也可以存在一个列表中。所有的题目可以累加得到一个总难度,根据每一题的难度占总难度的比值就可以换算为百分制的分数。每做对一题,就把获得的分数加起来,得到一个初始分数。当前代码使用整数表示分数,当题目过多时,可能出现每一题都是零分的情况,后续应当修改为浮点数。

grade=(grade*time_limite)/time_use

来调整分数

四,代码说明

算法思路已经在第三部分讲解得比较详细了,这一部分主要用注释来说明。

1,随机生成操作符:

defgetoperators():operatorslist=('+','-','*','/','+','-')#在列表中调整四种运算符出现的比值operators=random.choice(operatorslist)#从列表中随机选一个元素,保证了随机性ifoperators=='*':#乘除号难度赋值为2length=2elifoperators=='/':length=2else:length=1#加减号难度赋值为1returnoperators,length#返回操作符与其难度

2,随机生成操作数:

defgetoperands(range):operandstype=random.randint(1,2)#得到一个随机数,确定返回的数据类型degree=0#难度初始化为0ifoperandstype==1:#返回整数,有三个参数:字符串,用于打印与显示;数值,用于计算;难度,用于分配分数operands=random.randint(1,range)operandsvalue=Fraction(operands,1)#整数可以看做是一个分母为1的分数,统一为fraction格式可以方便后面的数值运算operands=str(operands)#字符串degree=1#整数难度为1else:#返回真分数operands1=random.randint(1,range)#得到两个随机数operands2=random.randint(1,range)degree=1.5#真分数难度为1.5ifoperands1

3,随机得到题目:

symbolnumber=random.randint(1,5)#随机得到操作符的个数,题目要求是1~10,这里是1~5,原理一样question=''#每一题用字符串存questionstack=[]#用列表存下题目的每一个操作数和操作符,以用自定义的方法计算答案ans=0#用于后文计算答案,初始化为0length_ques=0#用于后文分配分值,初始化难度为0

foriinrange(1,symbolnumber+1):#根据有多少个操作数,逐一得到操作数与操作符(op,va,de)=getoperands(ran)operands=op#传递字符串value=va#传递数值(operators,length)=getoperators()question=question+operands+operatorsquestionstack.append(value)#生成列表questionstack.append(operators)length_ques=length_ques+length+de#难度累加(op,va,de)=getoperands(ran)operands=opvalue=vaquestion=question+operands#得到了一道题目questionstack.append(value)#得到了便于计算答案的题目的列表格式length_ques=length_ques+de#难度累加

4,计算答案:

condition=0#条件,乘除法计算完毕时变为1whilelen(questionstack)>1:#计算至最后一个元素foriinrange(0,len(questionstack)):ifquestionstack[i]=='*':#先算乘除,questionstack[i-1]=questionstack[i-1]*questionstack[i+1]#一次运算并赋值delquestionstack[i]#删除元素delquestionstack[i]breakelifquestionstack[i]=='/':questionstack[i-1]=questionstack[i-1]/questionstack[i+1]delquestionstack[i]delquestionstack[i]breakelse:condition=1#表示乘除法已经计算完毕ifcondition==1:iflen(questionstack)>1:questionstack[0]=calculate(questionstack[0],questionstack[2],questionstack[1])#始终在前三位进行运算,意思是从左到右执行加减法delquestionstack[1]delquestionstack[1]else:ans=questionstack[0]#最后剩下的元素就是答案

5,题目查重:

questionfile=file('questionlist.txt','w')#准备把题目写入txt#根据输入的题目个数生成题目清单,每一个新生成的题会与现有题进行比较,重复不则重新生成#将生成的题目写入文件中,便于查看与打印whilelen(questionlist)

6,根据权重分配分值:

foriinrange(0,len(lengthlist)):scorelist.append(round(lengthlist[i]*100/totalscore))#totalscore是总难度,每一题的难度占比转换为百分制的分数

7,判断对错:

foriinrange(0,questionnumber):#总共有questionnumber道题print'第',i+1,'题是:'printquestionlist[i],'='print'分值为',scorelist[i],'分'print'答案是:',anslist[i]ans_user=raw_input('请输入你的答案:')print'您的答案是:',ans_userifans_user==str(anslist[i]):print'回答正确!'grade=grade+scorelist[i]#答对的分值累加起来,得到初始成绩else:print'回答错误!'

五,测试运行

展示两个运行结果

一:

二:

同时,题目已经被写入到txt文件里:

六,项目小结

总的来说,本次项目的要求均已完成。由于本次项目不复杂,在编代码之前就能够很清晰的想清楚该做些什么。遇到的最大的困难是对python语言不熟悉,很多功能不清楚。

psp表格已经在博客的开头给出了,代码复审和单元测试还没有进行,后续会学习,尽快培养出良好的软件开发习惯。

THE END
1.2025驾考刷题宝典科目一打印4. 制定模拟考试计划:将打印材料整理成模拟考试题目,模拟真实考试环境进行练习,提高答题速度和准确性。5. 组织学习小组:和学友一起使用打印材料学习,相互讨论和解答问题,共同提高学习效果。总结:打印驾考宝典科目一是备战驾照考试的一种高效学习利器。通过打印材料,不仅方便了随时翻阅和回顾知识点,同时也提高了注意力https://m.ybjk.com/ks/qcnhed.htm
2.驾考宝典题库打印驾考宝典题库打印,提供驾考宝典题库打印随机试题模拟考试训练,您需要在规定时间内完成给定的驾考宝典题库打印答题。要继续进行更多的驾考宝典题库打印练习,答题结束后点击再做一套可以获得更多驾考宝典题库打印题目。https://www.jiakaobaodian.com/kaoshi/c4f01a18.html
3.请问怎么把驾考宝典里头的所有题目打印出来3条回答:【推荐答案】直接去书店买书。正规驾校报名后,都会发这两本书的。https://wap.zol.com.cn/ask/x_14609306.html
4.对错题实现拍照,图片裁剪,图片涂鸦,分类归纳,打印导出,适用于最新源码2021 驾考一点通含数据库 浏览:53 最新源码2021 驾考一点通含数据库 php 版 无加密 全开源 基于SpringBoot的仿驾考宝典小程序(源码+数据库).zip 浏览:148 5星 · 资源好评率100% 毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码https://download.csdn.net/download/gdgztt/87128465
5.布小丁印题下载app布小丁印题官方免费下载5、支持文档打印,微信、qq等文档共享到app直接打印 布小丁印题更新日志: 1.修复若干bug; 2.优化细节问题; 华军小编推荐: 布小丁印题是一款非常实用、简单的工具,有兴趣的用户可以在华军软件园下载使用,另外还有众多同款同类软件提供下载,如:ABCmouse、作业帮直播课、作业帮在线拍照解题、驾考宝典维语版、空中课堂等。http://www.onlinedown.net/soft/10113532.htm
6.拍题App排行榜OPPO手机拍题app推荐●图文扫描:图转文字提取、扫描结果可复制分享打印。 ●作业问答:大学生专属的作业问题答案交流平台。 【适用场景】 学霸族:题目都会但不想做,快用大学搜题。 中间族:题目不会搜解题思路,快用大学搜题。 学渣族:题目不会又想学会,快用大学搜题。 考研族:希望学业更上一层楼,快用大学搜题。 自考族:希望自学自考https://www.diandian.com/phb/2007/5-1.html
7.驾考宝典科目一考题如何打印懂车帝提供驾考宝典科目一考题如何打印的详细内容,懂车帝是一个汽车资讯平台,懂车更懂你。我们提供最新汽车报价,汽车图片,汽车价格大全,行情、评测、导购等内容,看车选车买车就上懂车帝。https://www.dongchedi.com/tag/pgc/14993780
8.驾考宝典(过关秘籍)打印版.(7页)内容提供方:zengzhaonan 大小:1.68 MB 字数:约小于1千字 发布时间:2020-05-25发布于湖南 浏览人气:79 下载次数:仅上传者可见 收藏次数:0 需要金币:*** 金币(10金币=人民币1元) 驾考宝典(过关秘籍)打印版..pdf 关闭预览 想预览更多内容,点击免费在线预览全文 https://max.book118.com/html/2020/0525/8137127043002113.shtm
9.看球直播软件手机版下载如果你是准备要考驾照,那么现在就快来免费下载安装驾考宝典2023年最新版本体验吧! 184。看球体育app手机版(安全平台)看球直播软件手机版下载-看球直播app最新版v.6.33.3官方网站/一款手机音乐软件,为用户提供最方便的听音乐服务,波点音乐app下载通过软件用户可以找到自己需要的音乐,各种类型,为您提供免费的听音乐http://www.yuxin-robots.com/
10.看球直播APP(官网版)软件下载此外,懒人驾考app还提供保过险,只要您通过软件学习仍然不过关,我们会提供免费的最新题库,让您最快速地掌握所有上机考试的题目,不要犹豫,快来下载懒人驾考刺客信条大革命?点燃一根烟原唱,回忆瞬间点燃林玉英经典老歌点燃一根烟看球直播APP是一款非常专业使用的手机打印软件,该软件适用于各种佳能打印机,使用佳能打印http://www.lpyw.yoobx.com/
11.错题打印机下载错题打印机手机版2024官方下载主办单位名称:杭州科熠网络科技有限公司 装了错题打印机的用户还喜欢 作业帮 108MB 下载 快对56.87MB 下载 HelloTalk 159.73MB 下载 驾校一点通极速版 177.75MB 下载 驾考宝典 224.37MB 下载 学习通 212.95MB 下载 洋葱学园 77.96MB 下载 小猿搜题 149.58MB 下载 相关标签 学习 相关专题 最新专题快递https://wap.pp.cn/app_Bycx5cx5qdze/