结对编程——个人项目代码分析
一、整体布局
-
李世健同学的代码主要分为五个部分:
1)main.py:与用户交互的入口,进行登录,创建试卷。
2)login.py:实现用户登录等,对用户的输入(比如账户密码、题目数量、切换类型)进行相应的处理。
3)question_builder.py:用于生成各个年级的题目。
4)remove_repetition.py:用于查重,检测当前生成的题目是否已经在该用户过去生成的试卷或者当前试卷已经生成的题目中出现。
5)userinformation.txt:存储账户和密码。
二、各部分代码具体分析
-
userinformation.txt:
![image]()
该部分代码总共存储了9个用户的账户名和密码。
-
login.py:本部分代码中包含了一个函数:login_verify().
1)首先设置了两个全局变量,分别用于记录用户输入用户名和密码的次数以及试卷类型切换的数组:
![image]()
2)设置了一个列表user_info,用于存储题目数量、题目类型以及用户名:
![image]()
3)用户进行登录的逻辑:
![image]()
将当前输入的用户名和密码与user_information.txt中的账户密码进行比对,输入错误后会给出提示,并且让用户进行重新输入:
![image]()
4)倘若用户名和密码输入正确,则开始处理信息获得各用户的教师类型:
![image]()
我认为在此处的处理逻辑比较具有局限性,李世健同学是根据用户名的姓来判断教师类型的,猜测原因是由于个人项目的用户用例中,教师类型与用户的姓变化保持一致,但是在现实中,这两者之间是没有联系的,因此此种方法具有一定的局限性。
5)接下来是对于用户输入的数字进行处理,此处李世健同学的设计比较巧妙,讲数字划分为0,10-30,-1及其他,分别用于转换用户模式、生成试卷数量、退出登录以及输入错误数量的提示。
![image]()
6)切换试卷类型的逻辑:
![image]()
-
question_builder.py:本文件中共包含3个函数:build_primary_question(question_num),build_middle_question(question_num)和build_high_question(question_num),分别用于创建小学、初中和高中题目:
1)李世健同学实现的逻辑是:
有两个列表operator_list和data_list分别保存运算符和操作数,其中运算符不只是标准运算符(如:+、-、、/、cos),运算符可能出现“+sin”,其组合是随机的,操作数也不只是标准数字(如:1、56、32),操作数可能出现“(23”、“12)”、“cos26”等形式的操作数,其组合也是随机的,最后再将操作数和运算符合并形成最后的运算式,如:operator_list=["+sin", "-√", ""],data_list=[15, "(31", "tan32)", 7],则最后的题目为:15+sin(31-√tan32)*7
2)首先是运算符号:
![image]()
3)具体生成题目(只以初中题举例):
![image]()
![image]()
![image]()
![image]()
4)我觉得他此部分的代码写得非常巧妙,能够生成的案例可以达到随机且复杂的效果,非常符合个人项目的需求。
-
main.py:
![image]()
该部分代码先是调用了login_verify()函数来进行登录验证,并且获取用户的相关信息,存储到user_info中,根据用户新建一个文件夹或已生成的用户文件中生成一个txt文件,进行题目的写入,每生成一个题目都会进行查重,倘若已经存在则将不会写入而继续生成一个题目,直到不重复为止,可以达到项目的不重复要求。
三、 运行结果
1.程序运行之后:

在目录下生成一个试卷文件:

试卷内容:

2.分别测试各种输入错误以及小学、初高中的题目生成:




四、 优点和缺点
-
优点:
1)可读性比较强,命名、格式等都比较规范。
2)对于数据的处理考虑得比较全面,比如该输入数字时倘若输入字符串的处理或者数字过大等的处理都考虑到了,思虑周全。
3)生成的题目符合规范,并且达到了一定的复杂度。 -
缺点:
1)用户在登陆后只能生成一张试卷,生成完试卷后立即退出,感觉对于用户而言,这样的设计会比较麻烦,不能实现一次登录可以多次生成试卷。2)部分函数写的比较庞大,比如login_verify函数,按照名字而言,其应该是登录验证功能,但是也将转换试卷类型、输入题目数量等生成试卷部分的内容写入了该函数中。
-
总体而言,李世健同学的个人项目写的还不错,值得好好借鉴和学习。















浙公网安备 33010602011771号