软件工程第三次作业

要求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. 随机生成算式和括号时的合法性

    

照片:

  

原文地址:https://www.cnblogs.com/wangwx523/p/9932867.html