1. 程式人生 > >第3次作業-四則運算

第3次作業-四則運算

要求0

作業要求部落格:https://edu.cnblogs.com/campus/nenu/2016CS/homework/2266

要求1

git倉庫地址:https://git.coding.net/neneee/f4.git

百度網盤連結:https://pan.baidu.com/s/1xdEPIGrmMGWihGihMwPEVg

exe過大存放至網盤

要求2

  • 結對程式設計同學

    潘樂冰:https://www.cnblogs.com/panlb/

  • 介紹解題思路:

    功能一要接受輸入,生成n次4個隨機整數和3個隨機運算子,進行+、-、*、/四則運算。

       對於除法要額外考慮將分母通分以避免出現精度錯誤,並且不能除0;

          對於小數位數要做相應處理;判斷使用者答案並計數

    功能二在功能一的基礎上要隨機生成小數,隨機出現(),

    功能三在功能二的基礎上要對錶達式除重,生成指定路徑檔案,保證格式正確

  • 每個功能的重點/難點:

    功能一:重點生成隨機元素,除法的改進;難點除法的改進,結果是整數不能輸出小數點

    功能二:重點/難點對()進行新增及運算

    功能三:重點檔案讀寫;難點表示式除重,格式調整

  • 程式設計結果展示:

    功能一:

    

    功能二:

    

    功能三:

    

  • 展示重要程式碼片斷:

    判斷使用者輸入是否合法:

    arg列表存放使用者輸入

 1     try:
 2         n = int(arg[2])
 3         if(n <= 0):
 4             print("題目數量範圍為1到100之間的正整數。")
 5             os._exit(0)
 6         
 7         #此處省略處理程式碼
 8 
 9     except:
10         print("題目數量範圍為1到100之間的正整數。")
11         os._exit(0)    

 

    生成隨機元素:

    得到運算數列表num,運算子列表op

    1)功能一

1   operator = ['+','-','*','/']
2   numList = np.random.randint(1,10,4)
3   num = list(numList)
4
5   opList = np.random.randint(0,4,3) 6   op = [] 7   for i in opList: 8     op.append(operator[i])

 

       2)功能二

 1     operator = ['+', '-', '*', '/']
 2     numList = np.random.randint(1, 10, 5)
 3     num = list(numList)
 4     index = np.random.randint(0, 4)
 5     if (np.random.random() > 0.5):
 6         num[index] = round(np.random.uniform(1, 10), 2)
 7         del num[4]
 8     else:
 9         num.remove(num[index])
10 
11     opList = np.random.randint(0, 4, 3)
12     op = []
13     for i in opList:
14         op.append(operator[i])
15     if (np.random.random() > 0.1):
16         index1 = np.random.randint(0, 4)
17         index2 = np.random.randint(0, 4)
18         if index1 - index2 < 2 and index1 - index2 > -2:
19             i
20         elif index1 > index2:
21             if index1 == 4:
22                 op.append(')')
23                 op.insert(index2, '(')
24             else:
25                 op.insert(index2, '(')
26                 op.insert(index1, ')')
27         else:
28             if index2 == 4:
29                 op.append(')')
30                 op.insert(index1, ')')
31             else:
32                 op.insert(index1, '(')
33                 op.insert(index2, ')')

    

    檔案讀寫:

    path為檔案儲存路徑;生成檔案的格式,控制表示式的右對齊而不是結果的左對齊

 1             path = arg[4]
 2             f = open(path,"w")
 3 
 4             f.write(s.ljust(15, " "))
 5             cal_ans = eval(s)
 6             ans_list = re.split('(\.)', str(cal_ans))
 7             if (len(ans_list) > 1):
 8                 if (len(ans_list[2]) > 5):
 9                     ans_list[2] = ans_list[2][0:3]
10                     cal_ans = ''.join([str(x) for x in ans_list])
11                 if (ans_list[2] == '0'):
12                     cal_ans = ans_list[0]
13 
14             f.write("\t")
15             f.write(str(cal_ans))
16             f.write("\n")            

 

  • 展示你感覺得意、突破、困難的地方:

    帶括號表示式的連線    

 1 (num, op) = getEle2()
 2  s=""
 3 lenOp = len(op)
 4 lenNum = len(num)
 5 if lenOp == 3:
 6 for index, i in enumerate(num):
 7     s += str(i)
 8     if index <= lenOp - 1:
 9         s += op[index]
10     else:
11         k = 0
12         if op[0] == '(':
13             s += op[0]
14             k += 1
15         for index, i in enumerate(num):
16             s += str(i)
17             if index + k < lenOp:
18                 s += op[index + k]
19             if index + k + 1 < lenOp and op[index + k + 1] == '(':
20                 k += 1
21                 s += op[index + k]
22             elif index + k + 1 < lenOp and op[index + k] == ')':
23                 k += 1
24                 s += op[index + k]                            

    

    處理整數的小數點以及小數:

 1           ans_list = re.split('(\.)', str(cal_ans))
 2           if (len(ans_list)>1):
 3               if (len(ans_list[2]) > 5):
 4                   ans_list[2] = ans_list[2][0:3]
 5                   cal_ans = ''.join([str(x) for x in ans_list])
 6               if (ans_list[2] == '0'):
 7                   cal_ans = ans_list[0]

 

  • 給出結對程式設計的體會:

    1、程式設計是快樂的;

    2、結對程式設計是更快樂的,思想的碰撞讓我們互相促進,互相提高;

    3、分工協作非常有必要;

    4、遇到困難十分需要冷靜思考;

    5、簡單方法通常能有效的解決問題;

    6、要儘量瞭解使用的語言,能省不少事兒。

 

  • 在編碼、爭論等活動中花費時間較長,給你較大收穫的事件:       

    思想步調一致,基本沒有衝突

    花費時間較長在於對於()計算的處理:重要的是理清思路,對於報錯資訊可以先預處理,以便明確出錯原因

    

  • 結對程式設計留念:

    

    

       

    

  • 題外話: python 打包成exe多數會比較大,不適用。不好搞啊不好搞。