天天看點

軟體工程第三次作業

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

    

照片:

  

軟體工程第三次作業
上一篇: 第1次作業
下一篇: 第2次作業