软件工程第三次作业
要求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. 随机生成算式和括号时的合法性
照片: