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