第二次结对编程作业

李家涌博客链接
朱雅珊博客链接
所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 写算法
posted @ 2019-10-30 22:24  两三  阅读(206)  评论(2编辑  收藏  举报