一、链接
二、具体分工
前端: 刘伟楠
后端: 林易丰
博客: 两人共同完成
三、PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 20 | 15 |
· Estimate | · 估计这个任务需要多少时间 | 20 | 15 |
Development | 开发 | 780 | 720 |
· Analysis | · 需求分析 (包括学习新技术) | 160 | 160 |
· Design Spec | · 生成设计文档 | 120 | 130 |
· Design Review | · 设计复审 | 40 | 40 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 60 | 60 |
· Design | · 具体设计 | 60 | 120 |
· Coding | · 具体编码 | 80 | 80 |
· Code Review | · 代码复审 | 20 | 20 |
· Test | · 测试(自我测试,修改代码,提交修改) | 30 | 45 |
Reporting | 报告 | 40 | 40 |
· Test Report | · 测试报告 | 10 | 10 |
· Size Measurement | · 计算工作量 | 10 | 10 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 40 | 45 |
· 合计 | 1590 | 1510 |
四、解题思路描述与设计实现说明
1. 网络接口的使用
以注册绑定为例:
def registerbang(self): def register_(user, psw, student_number, student_password): url = 'http://www.revth.com:12300/auth/register2' headers = { 'Content-Type': 'application/json' } data = { 'username': user, 'password': psw, "student_number": student_number, "student_password": student_password } r = requests.post(url, headers=headers, data=json.dumps(data)) return r r = register_(self.user, self.psw, self.student_number, self.student_password) status = r.json()['status'] if status == 0 and 'user_id' in r.json()['data']: self.user_id = r.json()['data']['user_id'] self.is_register = True print('register may be successful') print(r.text) else: print('register failed!') error_report(status) print(r.text)
2. 代码组织与内部实现设计
AI部分代码组织设计
api部分代码组织设计
3. 说明算法的关键与关键实现部分流程图
算法的关键就是AI。因为太菜,之前想过列出七万多种情况分别计算权值,但是难度比较大,所以AI部分采取了依次找同花顺,葫芦,炸弹,同花,顺子,三条,若找到则给后墩,若多于一个则再给中墩,余下三张牌作为前墩。若找不到则按从大到小排序,将牌按大小依次给后墩,中墩,前墩。
上图为部分流程图,主要思路就是分别寻找同花顺,葫芦,炸弹,同花,顺子,三条,优先给后墩,其次给中墩,剩下三张作为前墩。
五、关键代码解释
林易丰 21:46:58
有价值/重要的代码
都有价值都重要……
举个炸弹的例子:
bmax和mid分别存放大小炸弹的数字(如果有)
if len(s) == 26: if len(bomb_num) == 3: # 3个炸弹 bmax = bomb_num[0] if bomb_num[1] > bmax: bmax = bomb_num[1] if bomb_num[2] > bmax: bmax = bomb_num[2] #最大给后墩 # 中间给中墩 if bomb_num[0] == bmax: if bomb_num[1] < bomb_num[2]: mid = bomb_num[2] else: mid = bomb_num[1] if bomb_num[1] == bmax: if bomb_num[0] < bomb_num[2]: mid = bomb_num[2] else: mid = bomb_num[0] if bomb_num[2] == bmax: if bomb_num[1] < bomb_num[0]: mid = bomb_num[0] else: mid = bomb_num[1] return 2 elif len(bomb_num) == 2: # 2个炸弹 bmax = bomb_num[0] if bmax < bomb_num[1]: bmax = bomb_num[1] mid = bomb_num[0] else: mid = bomb_num[1] return 2 elif len(bomb_num) == 1: # 1个炸弹 bmax = bomb_num[0] return 1 else: return 0 # 没炸弹 else: # 找给中墩 if len(bomb_num) == 2: # 2个炸弹 mid = bomb_num[0] if mid < bomb_num[1]: mid = bomb_num[1] return 2 elif len(bomb_num) == 1: # 1个炸弹 mid = bomb_num[0] else: return 0 # 没炸弹
六、性能改进与分析
1. 改进思路
优化规范一下各个找牌函数,之前因为缺少事先的构思,导致主函数里还需要许多逻辑判断和分支。
2. 展示性能分析图和程序中消耗最大的函数
七、单元测试
找同花顺函数:
构造思路就是把找特殊牌的函数拿出来单独对牌测试一下
八、贴出GitHub的代码签入记录
9.1 遇到的代码模块异常或者结对困难及解决办法
1、问题描述:后端接入的代码无法展现在UI上
2、尝试:理解后端传入的API参数,重新写过展示界面的函数。
3、是否解决: 是
4、有何收获:更加熟悉python这门演唱会
10 评价我的队员
10.1 值得学习的地方
队友写代码的能力比较强,逻辑比较清晰
10.2 需要改进的地方
沟通能力可以稍稍加强
11 学习进度条
第N周 | 新增代码(行) | 累计代码(行) | 本周学习耗时(小时) | 重要成长 |
---|---|---|---|---|
1 | 223 | 223 | 10 | 熟悉python |
2 | 219 | 442 | 11 | 了解pygame |