• 第二次结对编程作业


    一、链接

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

    本次作业博客链接

    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
  • 相关阅读:
    日期类的时间从为什么是从1970年1月1日(格林威治时间)
    网站缓存技术总结( ehcache、memcache、redis对比)
    干货|java缓存技术详解
    TCP和UDP的区别(转)
    form表单转换为Json字符串数据
    JSON.parse 和 JSON.stringify
    Navicat连接Oracle的几个问题及解决方案
    Python IO编程
    python阶段总结一
    使用git进行版本控制
  • 原文地址:https://www.cnblogs.com/lsyqlelel/p/11749841.html
Copyright © 2020-2023  润新知