第二次结对编程作业
一、链接
二、具体分工
前端: 刘伟楠
后端: 林易丰
博客: 两人共同完成
三、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 |