1

扫码查看

1.

2.分工

我:后端算法实现

队友:前端

3.psp表格

Planning计划3030
Estimate估计这个任务需要多少时间29753880
Development开发12001800
Analysis需求分析 (包括学习新技术)600600
Design Spec生成设计文档8060
Design Review设计复审1520
Coding Standard代码规范 (为目前的开发制定合适的规范)6060
Design具体设计3030
Coding具体编码6001000
Code Review代码复审120120
Test测试(自我测试,修改代码,提交修改)180100
Reporting报告4060
Test Repor测试报告2020
Size Measurement计算工作量1010
Postmortem & Process Improvement Plan事后总结, 并提出过程改进计划2030
-合计29753880

4.设计说明

5.关键代码解释

关键代码段:

    for i in card:
        f = i[0]
        fuhao.append(f)
        if i[1] == "J":
            number.append(11)
        elif i[1] == "Q":
            number.append(12)
        elif i[1] == "K":
            number.append(13)
        elif i[1] == "A":
            number.append(14)
        elif i[1:] == "10":
            number.append(10)
        else:
            number.append(int(i[1]))  #将J,Q,K,A转换为数字放到数组

    for x in number:
        if x == 2:
            ar[2] = ar[2] + 1
        if x == 3:
            ar[3] = ar[3] + 1
        if x == 4:
            ar[4] = ar[4] + 1
        if x == 5:
            ar[5] = ar[5] + 1
        if x == 6:
            ar[6] = ar[6] + 1
        if x == 7:
            ar[7] = ar[7] + 1
        if x == 8:
            ar[8] = ar[8] + 1
        if x == 9:
            ar[9] = ar[9] + 1
        if x == 10:
            ar[10] = ar[10] + 1
        if x == 11:
            ar[11] = ar[11] + 1
        if x == 12:
            ar[12] = ar[12] + 1
        if x == 13:
            ar[13] = ar[13] + 1
        if x == 14:
            ar[14] = ar[14] + 1  # 对拿到的poker进行桶排
        for x in fuhao:
            if x == '$':
                 ab[0] += 1
            elif x == '&':
                 ab[1] += 1
            elif x == '*':
                 ab[2] += 1
            elif x == '#':
                 ab[3] += 1
  • 算按法设计的主体思路,是将拿到的字符串,分为单个元素,再将每个元素的花色和大小分开存入两个数组
  • 接下来遍历存放花色的数组,判断其值来确定是否是同花色
  • 遍历存放数字的数组,判断其值是否大于等于1来找到相应的牌型

6.性能分析与改进

  • 对函数进行分析,显然自己代码的瓶颈是在于无脑。这样虽然可以比较方便,或者说比较偷懒,但是的的确确给自己的程序性能带来了很大的影响。
  • 对数组便利的情况可能会超时
    -改进:可以采用贪心算法,从所有牌里找到最大的一墩作为后墩,然后从剩下的牌里继续找下去

7.单元测试

控制台输入:
[*2 #3 &5 &5 *6  &7 *9 $9 *10 $J *Q $Q #A]
控制台输出:
[*2 #3  $J,&5 &5 *6  &7 *10 ,*Q $Q $9 *9 #A]
  • 异常:查找顺子时候,应为是对排序过的数组进行查找,在判断数字数组是否连续五个元素的值大于等于1时,可能出现对子或三条之类连续的情况,所以需要判断后一张牌是否与前一张牌大小相等
    -改进:
 if s[20] == 1:
            bb[2] = ""
            bb[2] = str(bb[2]) + str(card[t])
            for x in ar[2:6]:
                if card[t + 1] == card[t]:
                    t += 1
                else:
                    bb[2] = str(bb[2]) + ' ' + str(card[t + 1])
                    t += 1

8.Github代码迁入记录

9.遇到的困难及解决办法:

我:在此次编程中,首先拿到题目后毫无头绪,不知从何下手。前端后端都需要学习很多的东西,在算法编程过程前,一开始连游戏规则都弄不懂,队友们于是相约一起玩扑克牌,在对规则熟悉后慢慢开始规划如何实现算法。在编程过程中,思路也很容易卡壳,于是在稿纸上先画出了流程图,再开始实现代码,后来很多次测试代码也一直出现问题,于是一直修改测试修改测试修改......后来大部分问题得到了解决,在此次作业之前,写一个算法题可能对大部分人不是什么困难的事情,但这次的任务,需要调用接口实现前后端的连动等等,对小白来说这也太难了吧。总之,巨累,但收获更多,加油吧!

10.队友评价

我:一开始我和队友对于前端一无所知,队友选择了做前端,后来很惊喜的给我看到了前端的成果,界面还有据说不是很简单拖拽功能,赞!在结对过程中,两个人如果再多一些讨论,可能会完成更好的作品!

11.学习进度条:

12002002020文本匹配和分类
202001030Axure Rp8原型设计工具
35007003060前段知识和前后端联动
02-10 20:37
查看更多