对Quin同学的试卷自动生成程序代码分析

我的partner Quin同学使用Python语言编写的中小学试卷生成系统,在此我对他的劳动成果进行一个简单分析。

项目需求:

功能:

1、命令行输入用户名和密码,两者之间用空格隔开(程序预设小学、初中和高中各三个账号,具体见附表),如果用户名和密码都正确,将根据账户类型显示“当前选择为XX出题”,XX为小学、初中和高中三个选项中的一个。否则提示“请输入正确的用户名、密码”,重新输入用户名、密码;

2、登录后,系统提示“准备生成XX数学题目,请输入生成题目数量(输入-1将退出当前用户,重新登录):”,XX为小学、初中和高中三个选项中的一个,用户输入所需出的卷子的题目数量,系统默认将根据账号类型进行出题。每道题目的操作数在1-5个之间,操作数取值范围为1-100;

3、题目数量的有效输入范围是“10-30”(含10,30,或-1退出登录),程序根据输入的题目数量生成符合小学、初中和高中难度的题目的卷子(具体要求见附表)。同一个老师的卷子中的题目不能与以前的已生成的卷子中的题目重复(以指定文件夹下存在的文件为准,见5);

4、在登录状态下,如果用户需要切换类型选项,命令行输入“切换为XX”,XX为小学、初中和高中三个选项中的一个,输入项不符合要求时,程序控制台提示“请输入小学、初中和高中三个选项中的一个”;输入正确后,显示“”系统提示“准备生成XX数学题目,请输入生成题目数量”,用户输入所需出的卷子的题目数量,系统新设置的类型进行出题;

5、生成的题目将以“年-月-日-时-分-秒.txt”的形式保存,每个账号一个文件夹。每道题目有题号,每题之间空一行;

6、个人项目9月17日早上8点以前提交至各自负责的助教处。提交方式:工程文件打包,压缩包名为“几班+姓名.rar”。

附表-1:账户、密码

账户类型

账户

密码

备注

小学

张三1

123

张三2

123

张三3

123

初中

李四1

123

李四2

123

李四3

123

高中

王五1

123

王五2

123

王五3

123

附表-2:小学、初中、高中题目难度要求

小学

初中

高中

难度要求

+,-,*./

平方,开根号

sin,cos,tan

备注

只能有+,-,*./()

题目中至少有一个平方或开根号的运算符

题目中至少有一个sin,costan的运算符

他的工程优点是,整个工程清晰明了,且有相应注释帮助进行理解,格式规范、可读性佳,变量命名简单易懂,能将生成的试卷输出到相应文件夹。其中我觉得设计得非常优秀的部分是对括号的处理——结对、查重、排序等等。此段代码内先命名一个变量,每当出现一个左括号则加1,出现一个右括号则减1,当且仅当最后所得结果总和为0时最后才成立,这样很好地保证了避免括号落单的情况。

同时也有一些不足,例如源代码中有关于括号排序的处理,本应是为了防止大中小括号的包含关系出现错误从而进行的排序,思路非常棒,然而项目需求中只要求使用小括号,因而这段代码出现了冗余,可以考虑删去这一部分。同时还有一点我觉得可以改进的,就是在高中难度下的三角函数操作数是随机生成的1-100之间某个数字,考虑到实际做题时很多数都是不好求解、没意义的,因此可以自定义一个生成pai的函数,让题目更贴切生活实际。

代码中对于题目重复和和括号生成错误也有相应补救措施,增加了其代码的严谨性。总的说来这是个非常优秀的项目,可以多多借鉴学习。

猜你喜欢

转载自www.cnblogs.com/kisaragi11037/p/11553149.html