zoukankan      html  css  js  c++  java
  • 位军营 20190919-6 代码规范,结对要求

     

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/7631

    代码地址https://cjw_123.coding.net/p/cptj/git

    结对伙伴:迟俊文

    1.项目分析及编程收获:

    1.1 功能一

    要求:四则运算:支持出题4个数的四则运算题目

    1.1.1功能一重点、难点

    (1)对数字进行随机

    (2)将运算符存入列表随机输出

    (3)将字符串存入eval()运算

    1.1.2代码:

    代码:

    复制代码
    import random
    def Get_Problem():
        opratiorList = ['+','-','*','/']
        numList = [2,4,5,8]
        opration1 = random.choice(opratiorList)
        opration2 = random.choice(opratiorList)
        opration3 = random.choice(opratiorList)
        a = random.randint(1,9)
        if opration1 == '/':
            b = random.choice(numList)
        else:
            b = random.randint(1,9)
        if opration2 == '/':
            c = random.choice(numList)
        else:
            c = random.randint(1,9)
        if opration3 == '/':
            d = random.choice(numList)
        else:
            d = random.randint(1,9)
        
        ToString = str(a)+opration1+str(b)+opration2+str(c)+opration3+str(d)
        print(ToString+'=')
        result = eval('%d%s%d%s%d%s%d'%(a,opration1,b,opration2,c,opration3,d))
    
        return result
    复制代码

     

    1.2 功能二

    要求:支持括号

    1.2.1功能一重点、难点

    (1)对括号的随机处理

    (2)对有括号的运算顺序的逻辑处理

    1.2.2代码:

    复制代码
     def calculate(exp):
            loc = 0
            count = 0
            # 读入第一个数字/整体(被括号括起来的)
            firstNum = exp[loc]
            if firstNum != "(":
                result = float(firstNum)
                loc += 1
            else:
                locStart = loc + 1
                count += 1  # 为了将( 与 ) 进行匹配
                while count != 0:
                    loc += 1
                    if exp[loc] == "(":
                        count += 1
                    elif exp[loc] == ")":
                        count -= 1
                locEnd = loc
                loc += 1
                result = calculate(exp[locStart:locEnd])
            while loc < len(exp):
                operator = exp[loc]
                loc += 1
                # 完善第一个整体,即若后面有跟*或者/时读进来计算为一个整体
                while operator == "*" or operator == "/":
                    secNum = exp[loc]
                    if secNum != "(":
                        loc += 1
                    else:
                        locStart = loc+1
                        count += 1  # 为了将( 与 ) 进行匹配
                        while count != 0:
                            loc += 1
                            if exp[loc] == "(":
                                count += 1
                            elif exp[loc] == ")":
                                count -= 1
                        locEnd = loc
                        loc += 1
                        secNum = calculate(exp[locStart:locEnd])
                    if result == "worngproblem":
                            return "worngproblem"
                    elif secNum == "worngproblem":
                            return "worngproblem"
                    elif operator == "*":
                            result = result * float(secNum)
                    elif float(secNum) == 0:
                            return "worngproblem"
                    else:
                            result = result / float(secNum)
                    if loc >= len(exp):
                        break
                    operator = exp[loc]
                    loc += 1
                # 加号或者减号
                operator1 = operator
                if loc >= len(exp):
                    break
                secNum = exp[loc]
                if secNum != "(":
                    secNum = float(secNum)
                    loc += 1
                else:
                    locStart = loc + 1
                    count += 1  # 为了将( 与 ) 进行匹配
                    while count != 0:
                        loc += 1
                        if exp[loc] == "(":
                            count += 1
                        elif exp[loc] == ")":
                            count -= 1
                    locEnd = loc
                    loc += 1
                    secNum = calculate(exp[locStart:locEnd])
                # 完善第二个加数/减数
                if loc < len(exp):
                    operator = exp[loc]
                    loc += 1
                    flag = False
                    while operator == "*" or operator == "/":
                        flag = True
                        thirdNum = exp[loc]
                        if thirdNum != "(":
                            loc += 1
                        else:
                            locStart = loc+1
                            count += 1  # 为了将( 与 ) 进行匹配
                            while count != 0:
                                loc += 1
                                if exp[loc] == "(":
                                    count += 1
                                elif exp[loc] == ")":
                                    count -= 1
                            locEnd = loc
                            loc += 1
                            thirdNum = calculate(exp[locStart:locEnd])
                        if operator == "*":
                            secNum = secNum * float(thirdNum)
                        elif float(thirdNum) == 0:
                            return "worngproblem"
                        else:
                            secNum = secNum / float(thirdNum)
                        if loc >= len(exp):
                            break
                        operator = exp[loc]
                        loc += 1
                    if not flag:
                        loc -= 1
                if result == "worngproblem":
                    return "worngproblem"
                elif secNum == "worngproblem":
                    return "worngproblem"
                elif operator1 == "+":
                    result += float(secNum)
                else:
                    #print(secNum)
                    result -= float(secNum)
                if loc >= len(exp):
                    break
            return result
    复制代码

    1.3 功能三

    要求:限定题目数量,打印输出,避免重复

    1.3.1功能一重点、难点

    (1)将已有的表达式存入列表进行比较 若已打印过则重新生成

    (2)对输入的数字进行判断 只可以的正整数

    1.3.2代码:

    复制代码
    def main():
        if (sys.argv[1]=='-c'):
            
            list1 = []
            strnumofproblem = sys.argv[2]
            if strnumofproblem.isdecimal() == False:
                print("题目数量必须是 正整数。")
            else:
                intnumofproblem = int(strnumofproblem)
                for _ in range(intnumofproblem):       #避免生成重复式子
                    strnum = Get_Problem()
                    if strnum in list1:
                        intnumofproblem += 1
                    elif Get_Result(strnum) == "worngproblem":
                        intnumofproblem += 1
                    else:
                        list1.append(strnum)
                        print("%-30s %g"% (strnum+'=',Get_Result(strnum)))
    复制代码

    2.结对编程体会

      结对编程的好处之一在于大家能够互相督促,互相学习,比如说这次作业,像我有一些拖延症,总想着作业放到后面做,可是有伙伴在的情况下,你就要顾及伙伴的感受,是不是会影响别人的成绩什么的。还有就是在编程时可以互相交流会的与不会的一些技术,或者是某些函数,一个人可能查了很久很久也没能查出来,可是队友却可能已经见到过,甚至是之前用过,他只需要跟你说一下这个代码的名字你就能节约大量的时间成本。

    3花费时间较长的事

    1、对作业的解读与设计

    2、对bug的修改,我们两个由于是都刚刚接触python,所以都还不太熟悉,所以对于空格和tab缩进时不能同时使用这一点大为头痛,找了好久没找到原因(因为有时候看着真的是没有混用),解决掉这个bug之后也是大为舒心,感觉上像是多了一项技能。

    3、对细节的分析,刚上手时并没有意识到题目的难度,越做到后面就看到了越多的题目细节。

    4工作照片

    5代码地址https://cjw_123.coding.net/p/cptj/git

  • 相关阅读:
    apache开源项目 -- Wicket
    读书笔记--《机器人时代》
    apache开源项目--dbutils
    apache开源项目--mina
    apache开源项目--OpenMeetings
    apache开源项目--lume
    apache开源项目--Sirona
    shared_ptr的简单实现
    高并发网络编程之epoll详解
    最长公共子序列|最长公共子串|最长重复子串|最长不重复子串|最长回文子串|最长递增子序列|最大子数组和
  • 原文地址:https://www.cnblogs.com/unclejokermr/p/11585502.html
Copyright © 2011-2022 走看看