• 第二次结对编程作业


    1、链接

    陈佳雯
    王思婷
    UI视频
    github
    fork

    2、具体分工

    • 我们组的分工是这样的:第一周两个人一起探讨怎样实现代码以及设计的原型,确定任务的方向,决定以小程序模式实现UI设计,同时确定任务分工,一人主要负责AI算法的实现,一人则负责前端UI和接口的实现;第二周分别做自己的任务,在边学习边探讨的环境中完成任务的60%;第三周改进算法以及连接接口,分写博客,上传代码等。

    3、PSP表格

    PSP4.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
    ·Planning · 计划 120 20
    · Estimate · 估计这个任务需要多少时间 10 20
    ·Development · 开发 2590 3870
    · Analysis · 需求分析 (包括学习新技术) 500 820
    · Design Spec · 生成设计文档 120 150
    · Design Review · 设计复审 60 60
    · Coding Standard · 代码规范 (为目前的开发制定合适的规范) 100 120
    · Design · 具体设计 250 350
    · Coding · 具体编码 1200 1650
    · Code Review · 代码复审 100 160
    · Test · 测试(自我测试,修改代码,提交修改) 100 340
    ·Reporting · 报告 60 100
    · Test Repor · 测试报告 30 45
    · Size Measurement · 计算工作量 30 30
    · Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 40 45
    · 合计 2600 3890

    4、解题思路与设计说明

    • 网络接口的使用

      基本使用格式为:

      >>> r = requests.get('url')
      

      相当于requests,request(method='get', 'url')

      >>> r = requests.post('url', data = {'key':'value'})
      

      相当于requests,request(method='post', 'url', data = {'key':'value'})

      在本次作业中,出牌算法需要先进行用户和用户密码的注册的请求,具体代码如下:

      url = "https://api.shisanshui.rtxux.xyz/auth/register"
      
      payload = "{"username":"test8","password":"test8"}"
      headers = {'content-type': 'application/json'}
      
      response = requests.request("POST", url, data=payload, headers=headers)
      

      登录和注册类似就不具体描述,需要从登录返回的json格式的数据中提取token值来开启战局。需要注意的是返回的json数据需要用json.loads()函数转为python可识别的对象。获得开启战局请求代码为:

      url = "https://api.shisanshui.rtxux.xyz/game/open"
      
      headers = {'x-auth-token': token}
      
      response = requests.request("POST", url, headers=headers)
      

      开启战局请求成功后,会返回战局id以及分配到的十三张牌。在算法进行处理后,将前中尾墩的字符串装入payload,再对出牌进行请求。代码如下:

      url = "https://api.shisanshui.rtxux.xyz/game/submit"
      
      payload = "{"id":"+id+","card":[""+qiandun+"",""+zhongdun+"",""+weidun+""]}"
      headers = {
          'content-type': "application/json",
          'x-auth-token': token
          }
      
      response = requests.request("POST", url, data=payload, headers=headers)
      
    • 代码组织与内部实现设计(类图)

    • 说明算法的关键与关键实现部分流程图

    代码最关键的部分就是确定前墩中墩尾墩的牌型,根据牌型设定权值,暴力枚举所有组合,比较权值大小。本次算法采用深度广度搜索来枚举所有组合。

    5、关键代码解释

    def dfs(start, end): # 暴力枚举
        for i in range(start, 14):
            temp[end] = poker[i] # 抽取 
         flag[i] = 1 # 防止重复
            if end == r1: #完成尾墩抽取,r1=5
                init_1() # 初始化dfs()函数
                dfss(1, 1) #进行中墩抽取,结构与dfs()类似
            else:
                dfs(i + 1, end + 1)
            flag[i] = 0
    

    6、性能分析与改进

    • 改进的思路

      python的整体运行时间要5-8s。在对于牌的排序时,优化了桶排序,减少了桶排序时间。以及尽量减少循环过程中的计算量,有多重循环的尽量将内层的计算提到上一层。例子:将长度计算提到循环外等。

    • 展示性能分析图和程序中消耗最大的函数

    以上为内存使用情况。

    以上为代码覆盖率。

    程序中消耗最大的函数是dfs_1(),因为是暴力枚举所有组合,所以用时较长。

    7、单元测试

    测试了中墩的权值算法。前墩和尾墩单元测试函数类似。该代码验证的是给与中墩五张同花色的顺子手牌,zhong()函数应返回的是同花顺的权值也就是10。运行代码得出结果与预期一致。

    import unittest
    from shisanshui import *
    
    class MyTestCase(unittest.TestCase):
        def test_tou(self):
            ans_3=[Card(2,3),Card(2,4),Card(2,5),Card(2,6),Card(2,7)]
            self.assertEqual(zhong(ans_3), 10)
    
    if __name__ == '__main__':
        unittest.main()
    

    8、贴出Github的代码签入记录

    9、遇到的代码模块异常或结对困难及解决方法

    • 问题描述

      ①前端的图形界面完全一窍不通

      ②不会接口的调用

      ③算法对权值的确定

    • 做过哪些尝试

      在网上搜了很多教程,还好前端的小程序设计的案例超级多。好多部分的源码都是从网上借鉴的。

    • 是否解决

      解决了。面向百度编程真好,遇到问题即使百度是最好的学习方法。

    • 有何收获

      现在对软件的编程有个大概的了解。后端可以很难,但前端一定恶心你。也学到了好多东西,做好一个app实在是不容易。

    10、评价你的队友

    ①值得学习的地方:对待设计很认真,在假期之余也不忘记任务,保持高效率实现过程,认真负责,有理有序,不慌不忙。

    ​ 需要改进的地方:在分别任务过程中缺少更多的交流,需要更好的配合合作,培养更好的默契。

    ②值得学习的地方:队友完成了前端的设计。在完成自己的任务同时,还帮我解决了许多问题。

    ​ 需要改进的地方:有这么强的队友,我觉得不需要改进。

    11、学习进度条

    第N周 新增代码(行) 累计代码(行) 本周学习耗时(小时) 累计学习耗时(小时) 重要成长
    1 0 0 15 15 学会使用原型设计软件
    2 120 120 10 10 算法简单实现牌的分类及 判断墩类的牌型
    3 210 340 34 44 学习深度优先搜索算法。前端开始学习微信小程序的开发,设计了ui界面
    4 530 540 43 87 完成出牌算法及优化,学习使用接口调用。ui界面完成接口的调用
           |
  • 相关阅读:
    聊聊Docker数据卷和数据卷容器
    Nginx虚拟主机
    Shell文本处理四剑客
    Docker镜像、容器剖析
    Tomcat性能优化及JVM内存工作原理
    Nginx动静分离架构&&HA-LB集群整合
    Mysql主从复制架构实战
    Mysql编译安装详解
    Apache虚拟主机实战
    Ansible性能调优
  • 原文地址:https://www.cnblogs.com/ztzd/p/11674176.html
Copyright © 2020-2023  润新知