zoukankan      html  css  js  c++  java
  • 第二次结对编程作业

    第二次结对编程作业

    ==========
    1、组队情况

    181700140 吴超望 博客链接 Github项目地址
    181700413 黄智[ 博客链接](https://www.cnblogs.com/181700413huangzhi/p/11768473.html
    /)Github项目地址
    181700144 张诗栋 博客链接Github项目地址

    2、具体分工

    吴超望:进行图形界面设计,讨论AI和UI代码实现
    黄智:进行代码算法的设计编写
    张诗栋:撰写博客,测试例子,测试AI的算法,以便于改进AI的算法

    3、PSP表格

    | PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟)|
    | -------- | -------- | -------- |
    | Planning |计划 | 30|20
    |Estimate |估计这个任务需要多少时间| 1200|1500
    |Development |开发 |0|0
    |Analysis |需求分析 (包括学习新技术) |100|100
    |Design Spec |生成设计文档 |0|0
    |Design Review |设计复审 |0|0
    |Coding Standard|代码规范|0|0
    |Design |具体设计|0|0
    |Coding |具体编码|1000|1200
    |Code Review |代码复审|0|0
    |Test |测试|20|30
    |Reporting |报告|35|50
    |Test Repor |测试报告 |0|0
    |Test Repor |计算工作量|15|20
    |Postmortem & Process Improvement Plan|事后总结, 并提出过程改进计划|20|30
    | |合计|265|1570

    4、解题思路描述与设计实现说明

    (1)网络接口的使用
    注册接口:
    import requests
    import json
    def regiseterAndBind(account,jwc):
    url='http://www.revth.com:12300/auth/register2'
    form_data={
    "username": account["username"],
    "password": account["password"],
    "student_number":jwc["student_number"],
    "student_password":jwc["student_password"]
    }
    headers={
    "Content-Type":'application/json',
    }
    response=requests.post(url=url,headers=headers,data=json.dumps(form_data),verify=False);
    print(response.text)
    account=dict()
    jwc=dict()
    account["username"]=""
    account["password"]=""
    jwc["student_number"]=""
    jwc["student_password"]=""
    regiseterAndBind(account,jwc)

    登入接口:
    import requests
    import json
    def login(account):
    url='http://www.revth.com:12300/auth/login'
    form_data={
    "username": account["username"],
    "password": account["password"],
    }
    headers={
    "Content-Type":'application/json',
    }
    response=requests.post(url=url,headers=headers,data=json.dumps(form_data),verify=False);
    print(response.text)
    account=dict()
    account["username"]=""
    account["password"]=""
    login(account)

    开始游戏接口:
    import http.client
    import json
    import re
    import requests
    def game_open(token):
    url='http://www.revth.com:12300/game/open'
    headers={
    "X-Auth-Token":token
    }
    response=requests.post(url=url,headers=headers,verify=False);
    return response.text
    tt=game_open(token)

    (2代码组织与内部实现设计(类图)
    说明算法的关键与关键实现部分流程图
    UI和AI

    (3)说明算法的关键与关键实现部分流程图

    5、关键代码解释

    def dfs(list0):
    
        list1 = list0.copy()
        iter1 = itertools.combinations(list1, 5)
        start=time.clock()
        while 1:
            try:
                tup0 = next(iter1)
                listc = list(tup0)
                list1 = list0.copy()
                for i in range(5):
                    list1.remove(listc[i])
                iter2 = itertools.combinations(list1, 5)
                while 1:
                    try:
                        tup1 = next(iter2)
                        liste = list(tup1)
                        list2 = list0.copy()
                        for i in range(5):
                            list2.remove(listc[i])
                        for i in range(5):
                            list2.remove(liste[i])
                        a = getscore(listc, 5)
                        b = getscore(liste, 5)
                        c = getscore(list2, 3)
                        if a > b and b > c:
                            listsum[1] = a + 2 * b + 3 * c
                            if listsum[1] > listsum[0]:
                                listsum[0] = listsum[1]
    
                                lians.clear()
                                for k in range(3):
                                    lians.append(list2[k])
                                for k in range(5):
                                    lians.append(liste[k])
                                for k in range(5):
                                    lians.append(listc[k])
                    except StopIteration:
                        break
    
            except StopIteration:
                return
    

    这个是核心部分,我用的是python自带的迭代器中的combination(其实我一开始是自己写排列组合的,但是发现它的速度和python自带的差不多快,就没用了,后面还考虑过把所有的排列预先放在文件里面,但是读文件很慢,时间反而更长了,也放弃了),进行排列组合,分成3堆牌,每堆牌都会记一个分数,第一次把牌型存下来,后面,如果分数大于上一次排列,就更新并记录下来,最后得到的就是我觉得比较优的牌型组合,当然,这会由于getscore函数而变化,getscore权重取得好,得到的结果就更好了,但是这个我难以分析怎样选取最优,大致设了一个权重

    6、性能分析与改进

    (1)改进思路
    用C++

    (2)性能分析

    (3)消耗最大的函数
    消耗最大的就是关键代码里的那个函数,没想到python这么慢,跑一个C(13,8)*C(8,5)加上牌型分数计算,居然跑了块10秒,这是我这次作业最痛心的地方,时间复杂度没算好,就开始写了,后面跑出来算法太慢了,导致我觉得这次作业做得很失败(早知道用C++了)

    7、单元测试

    构造思路
    先判断是否特殊牌型,如是直接输出。否则调用暴搜函数将最优结果输出
    单元测试代码
    lians = lista.copy()
    dfs(lista)
    lans = []
    st = ""
    for i in range(0, len(lians)):
    st = st + lians[i].color + str(lians[i].num) + " "
    st = st.replace("10", "T")
    st = st.replace("11", "J")
    st = st.replace("12", "Q")
    st = st.replace("13", "K")
    st = st.replace("14", "A")
    st1 = ""
    st2 = ""
    st3 = ""
    for x in range(0, 8):
    st1 = st1 + st[x]
    for x in range(9, 23):
    st2 = st2 + st[x]
    for x in range(24, 38):
    st3 = st3 + st[x]
    st1 = st1.replace("T", "10")
    st2 = st2.replace("T", "10")
    st3 = st3.replace("T", "10")
    print(st1)
    print(st2)
    print(st3)
    lans.append(st1)
    lans.append(st2)
    lans.append(st3)
    submit(idd, lans)
    show_game()

    8、Github的代码签入记录

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

    (1)TKINTER库不熟悉
    问题描述:TKINTER库不熟悉,需要上网查很多资料
    是否解决:是,解决了,通过上网慢慢学习解决了。
    (2)对于算法的时间复杂度没有很好预估
    问题描述:算法在服务器空闲时不超时,忙时部分超时,不稳定
    是否解决:还没解决

    10、评价你的队友

    吴超望
    值得学习的地方:图形界面设计方面很强

    需要改进的地方:没有

    黄智
    值得学习的地方:值得学习的地方太多了,队友很关心我们结对编程的进度,对算法实现能力强,思维活跃。

    需要改进的地方:没有,太强了

    11、学习进度条

    第N周 新增代码 累计代码(行) 本周学习耗时(小时) 累计学习耗时(小时) 重要成长
    1 0 0 12 12 熟悉Axure软件,学会原型设计
    2 1000 1000 26 26 学会了TKINTER库,学会了用网络接口
  • 相关阅读:
    『Asp.Net 组件』第一个 Asp.Net 服务器组件:自己的文本框控件
    『Asp.Net 组件』Asp.Net 服务器组件 的开发优势和劣势
    『开源』简单的代码统计工具 开源啦[有图有真相]
    文件中的类都不能进行设计,因此未能为该文件显示设计器。设计器检查出文件中有以下类: FormMain --- 未能加载基类
    DB2:FETCH FIRST 1 ROWS ONLY
    IEnumerable的几个简单用法
    一个字符串中包含逗号个数
    字符串处理总结之一(C#String类)
    C# 中DateTime的各种使用
    C# 键值对类相关
  • 原文地址:https://www.cnblogs.com/1234a12/p/11768098.html
Copyright © 2011-2022 走看看