• 软件工程第三次作业


    要求0  作业地址:  https://edu.cnblogs.com/campus/nenu/2016CS/homework/2266

    要求1       git仓库地址:https://git.coding.net/wishsama/f4.git

    要求2  

    一.编程队友及博客地址

        陈博澜  http://www.cnblogs.com/chenbl440/p/9933574.html

    二.解题思路

      利用python的list存储算式,把随机生成的数和运算符存入list,再转换成string输出。

      功能1算式生成如下

     1     len = 7
     2     formula = []
     3     add = ""
     4     while len > 0:
     5         if len % 2 == 1:
     6             add = str(random.randint(1, 9))
     7         if len % 2 == 0:
     8             add = ops[random.randint(0, 3)]
     9         formula.append(add)
    10         len -= 1

      在合适位置随机生成第一个“(”,用该位置推算“)”的可能位置并随机生成,没时间做第二个括号了

    1 if_parenthesis = random.randint(1,100)
    2     if if_parenthesis > 50:
    3         open_parenth1 = random.randrange(1, 5, 2)
    4         close_parenth1 = random.randrange(open_parenth1+3, 8, 2)
    5         formula.insert(open_parenth1-1, '(')
    6         formula.insert(close_parenth1, ')')

      计算的时候遍历list,找到第一个应该计算的运算符,计算左右两边后修改list并pop两个元素,重新遍历直到没有运算符剩下

     1 def calculate(formula):
     2     while 1:
     3         if '*' in formula or '/' in formula:
     4             for i, j in enumerate(formula):
     5                 if j == '*':
     6                     formula[i+1] = float(formula[i-1]) * float(formula[i+1])
     7                     formula.pop(i-1)
     8                     formula.pop(i-1)
     9                     break
    10                 if j == '/':
    11                     formula[i+1] = float(formula[i-1]) / float(formula[i+1])
    12                     formula.pop(i-1)
    13                     formula.pop(i-1)
    14                     break
    15         if '+' in formula or '-' in formula:
    16             for i, j in enumerate(formula):
    17                 if j == '+':
    18                     formula[i+1] = float(formula[i-1]) + float(formula[i+1])
    19                     formula.pop(i-1)
    20                     formula.pop(i-1)
    21                     break
    22                 if j == '-':
    23                     formula[i+1] = float(formula[i-1]) - float(formula[i+1])
    24                     formula.pop(i-1)
    25                     formula.pop(i-1)
    26                     break
    27         else:
    28             return formula

      计算带括号的算式时先找到第一个“)”,向前推出配对的“(”,计算出括号内的最终结果,删除括号及内容并用结果替代

     1 def parenth(formula):
     2     if "(" in formula:
     3         while 1:
     4             if ")" in formula:
     5                 b = formula.index(")")
     6                 for i in range(b,-1,-1):
     7                     if formula[i] == "(":
     8                         new_list = []
     9                         new_list = formula[i+1:b]
    10                         byte = calculate(new_list)[0]
    11                         del(formula[i:b+1])
    12                         formula.insert(i,byte)
    13                         break
    14             else:
    15                 return calculate(formula)
    16 
    17     else:
    18         calculate(formula)

      难点:

        1. 多个括号的插入

        2. 计算过程

        3. 输出格式(预计通过字符串操作解决,没时间了)

      编程体会

        结对编程提升了完成效率,避免了一个人编程时发生的粗心等问题,节省了找bug时间。但没有达到两倍的效率,所以实际上是浪费资源,各自负责一部分是更优的选择。构建之法中将编程和赛车飞机导航相提并论我不敢苟同,赛车飞机导航比起效率更注重安全性和稳定性,一次失误将导致生命的危险。而编程并不,编程有二次修改的机会,更注重经济效率,结对只会浪费人力资源。

      至少3项在编码、争论等活动中花费时间较长,给你较大收获的事件:

        1. 要求3的重复检查(没有解决思路)

        2. 实现计算顺序的过程中复习了python数据存储结构知识

        3. 随机生成算式和括号时的合法性

        

    照片:

      

  • 相关阅读:
    主流浏览器内核概览
    图片圆角边框自适应宽高(深夜原创)
    <程序员节>
    谁说Float菜单不可以水平居中
    如何做好一份前端工程师的简历?
    重温textjustify:interideograph
    Firefox 4 beta 1发布——前端开发者须知
    让PHP程序永远在后台运行
    如何让Linux后台运行命令或php
    PHP执行后台程序 argv
  • 原文地址:https://www.cnblogs.com/wangwx523/p/9932867.html
Copyright © 2020-2023  润新知