第二次结对编程作业

时光总嘲笑我的痴心妄想 提交于 2019-12-03 00:10:15

一、链接

结对同学博客链接(刘伟楠)

本次作业博客链接

GitHub项目地址

二、具体分工

前端: 刘伟楠

后端: 林易丰

博客: 两人共同完成

三、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部分采取了依次找同花顺,葫芦,炸弹,同花,顺子,三条,若找到则给后墩,若多于一个则再给中墩,余下三张牌作为前墩。若找不到则按从大到小排序,将牌按大小依次给后墩,中墩,前墩。

上图为部分流程图,主要思路就是分别寻找同花顺,葫芦,炸弹,同花,顺子,三条,优先给后墩,其次给中墩,剩下三张作为前墩。

五、关键代码解释

有价值/重要的代码

都有价值都重要……
举个炸弹的例子:
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的代码签入记录

九、遇到的代码模块异常或者结对困难及解决办法

1. 问题描述:

判断语句时发现函数返回值不对

2. 尝试:

逐次输出看看

3. 是否解决:

4. 有何收获:

先把找牌的函数返回值赋给一个变量,用变量判断,不然多次使用相当于多次调用,结果不一样,也耗时

十、评价我的队员

1. 值得学习的地方

队友比较fashion,审美也比较好,心态也比较好,原型画得也好

2. 需要改进的地方

代码能力,学习热情

11 学习进度条

第N周 新增代码(行) 累计代码(行) 本周学习耗时(小时) 重要成长
1 1000 1000 20 写了AI,布局构思不充分,重复太多,代码过长
2 400 1400 12 找bug和写API
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!