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库,学会了用网络接口
  • 相关阅读:
    word设置的密码忘了怎么办?
    Navicat Report Viewer 设置 HTTP 的方法
    如何处理Navicat Report Viewer 报表
    excel密码忘记了怎么办
    Beyond Compare文本比较搜索功能详解
    Popular Cows POJ
    Problem B. Harvest of Apples HDU
    网络流模型整理
    The Shortest Statement CodeForces
    Vasya and Multisets CodeForces
  • 原文地址:https://www.cnblogs.com/1234a12/p/11768098.html
Copyright © 2011-2022 走看看