第二次结对编程作业
李家涌博客链接
朱雅珊博客链接
所Fork的同名仓库的Github项目地址
2.具体分工
李家涌:负责AI算法、接口、部分博客撰写
朱雅珊:负责UI界面设计、部分博客撰写
3.PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 60 | 90 |
Estimate | 估计这个任务需要多少时间 | 25 | 30 |
Development | 开发 | 500 | 640 |
Analysis | 需求分析 (包括学习新技术) | 1000 | 1800 |
Design Spec | 生成设计文档 | 60 | 50 |
Design Review | 设计复审 | 30 | 30 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 40 | 35 |
Design | 具体设计 | 60 | 60 |
Coding | 具体编码 | 500 | 650 |
Code Review | 代码复审 | 30 | 70 |
Test | 测试(自我测试,修改代码,提交修改) | 100 | 240 |
Reporting | 报告 | 50 | 40 |
Test Repor | 测试报告 | 20 | 30 |
Size Measurement | 计算工作量 | 20 | 10 |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 20 | 20 |
合计 | 2515 | 3775 |
4. 解题思路描述与设计实现说明
4.1网络接口的使用
定义每个功能对应的函数,使用requests模块的post和get函数,得到所需要的数据,再用json模块处理得到所需要的数据。
登录模块具体代码示例:
def login(a,b):#登录账号
url = 'http://api.revth.com/auth/login'
headers = {
"Content-Type": 'application/json',
}
form_data = {
"username":a,
"password":b,
}
response = requests.post(url=url, headers=headers, data=json.dumps(form_data), verify=False);
print(response.text)
if response.json()['status']==0:
mytoken=response.json()['data']['token']
start(mytoken)
elif response.json()['status']==1005:
messagebox.askokcancel('WARNING', '用户名或密码错误', icon='warning')
4.2代码组织与内部实现设计(类图)
4.3说明算法的关键与关键实现部分流程图
5.关键代码解释
枚举组合
def dfs_1(s, cur):# 暴力枚举组合
for i in range(s,14):
s1[i] = 1 # 标记这张牌已经拿过
temp_1[cur] = poker_1[i]# 将牌暂存
if cur == 5 :# 选完5张后开始选择另外5张
init_1()
dfs_2(1, 1) # 选后5张
else:
dfs_1(i + 1, cur + 1) # 选下一张
s1[i] = 0 # 回溯标记删除
前墩的权值计算
def first():#计算前墩的权值
global score
init_cnt()
x = 1
for i in range(0,3):
tempp1[i]=ans_3[i+1]
tempp1.sort(key=takenum)
for i in range(1,4):
ans_3[i]=tempp1[i-1]
for i in range(1,4):
hua[ans_3[i].flower] +=1
number[ans_3[i].num]+=1
x = 1
for i in range(1,5):
if hua[i] == 3:
if shunzi3(ans_3[1].num) == 1: # 三张同花
k=(9.0+0.9 / 11.0 * (ans_3[1].num - 1))
score += k
return k
...
x = 1
for i in range(3,0,-1):
if number[ans_3[i].num] == 1:
x = ans_3[i].num
if number[ans_3[i].num] == 2: # 一对
k=(1.0 + 0.9/(130+13)*((ans_3[i].num - 1)*10+x-1)*1.0)
score += k
return k
x = 1
k=0.9 / (1300.0 + 130.0 + 13.0)*((ans_3[3].num - 1) * 100 + (ans_3[2].num - 1) * 10 + (ans_3[1].num - 1))
score += k
return k
6.性能分析与改进
6.1描述你改进的思路
1.先进行特殊牌型的判断,如果是就直接输出,减少处理的时间
2.对于分数与最大分数差距过大的牌型进行剪枝处理
6.2展示性能分析图和程序中消耗最大的函数
性能分析图
7.单元测试
展示出项目部分单元测试代码,并说明测试的函数,构造测试数据的思路
输入:
5 Q &8 &5 $8 $J $6 3 5 *9 &6 &J &Q
输出:
$8 $J $6
*5 Q 3 5 9
&8 &5 &6 &J &Q
def printf_ans():#输出
submit_ans.clear()
s=""
for i in range(1, 3 + 1): # 前墩
if i!=3:
s+=number_to_hua(end_3[i].flower)+change(end_3[i].num)+" "
else:
s+=number_to_hua(end_3[i].flower)+change(end_3[i].num)
submit_ans.append(s)
print(s)
8.贴出Github的代码签入记录
9.遇到的代码模块异常或结对困难及解决方法
问题描述
1.不清楚算法的流程及前后端交互
2.不知道用什么工具制作UI
做过哪些尝试
1.B站疯狂学习
2.各种百度
是否解决
基本解决
有何收获
1.了解的Python的GUI编程
2.网络接口的使用
3.前后端的交互
10.评价你的队友
评价人:朱雅珊
-
值得学习的地方:学习效率高,编程能力强,还会耐心指导我学习UI,主动帮忙完善前端代码,绝世好队友。
-
需要改进的地方:我的队友真的太优秀了,实在想不出有什么需要改进的地方。
评价人:李家涌
-
值得学习的地方:队友很关心我们结对编程的进度,学习能力强,需要用啥就学啥。
-
需要改进的地方:男女生交流可能不是很方便。
11.学习进度条
第N周 | 新增代码(行) | 累计代码(行) | 本周学习耗时(小时) | 累计学习耗时(小时) | 重要成长 |
---|---|---|---|---|---|
1 | 0 | 0 | 7 | 7 | 了解原型设计并学习了axure rp8的使用 |
2 | 0 | 0 | 12 | 16 | 查找资料并想出UI、AI的大致实现思路 |
3 | 360 | 360 | 55 | 70 | 设计AI |
4 | 785 | 1145 | 77 | 87 | 写算法 |