https://github.com/history5201/python
在程序的各個模塊的開發上耗費的時間PSP表格:
PSP2.1 | Personal Software Process Stages | 預估耗時(分鍾) | 實際耗時(分鍾) |
---|---|---|---|
Planning | 計划 | 30 | 42 |
· Estimate | · 估計這個任務需要多少時間 | 30 | 42 |
Development | 開發 | 305 | 395 |
· Analysis | · 需求分析 (包括學習新技術) | 20 | 30 |
· Design Spec | · 生成設計文檔 | 25 | 30 |
· Design Review | · 設計復審 (和同事審核設計文檔) | 10 | 15 |
· Coding Standard | · 代碼規范 (為目前的開發制定合適的規范) | 15 | 25 |
· Design | · 具體設計 | 30 | 45 |
· Coding | · 具體編碼 | 150 | 180 |
· Code Review | · 代碼復審 | 30 | 35 |
· Test | · 測試(自我測試,修改代碼,提交修改) | 25 | 35 |
Reporting | 報告 | 100 | 110 |
· Test Report | · 測試報告 | 70 | 65 |
· Size Measurement | · 計算工作量 | 15 | 25 |
· Postmortem & Process Improvement Plan | · 事后總結, 並提出過程改進計划 | 15 | 20 |
合計 | 435 | 547 |
3)解題思路描述:
在百度以及GitHub上尋找適合的報告書作為參考以及參考網絡代碼進行修改
4)設計實現過程:
1、定義三個函數:出題函數、判斷函數、主函數
2、出題函數:在字符數組[+ - * /]中隨機抽取兩個或一個符號以及0-30之間抽取隨機數進行四則運算
3、判斷函數:判斷同學從鍵盤內輸入的答案是否正確;
4、主函數:輸入一個數值N,以便學生選擇做幾題,然后循環出題以及判斷函數。
流程圖如下所示:
5)代碼說明:
import random from fractions import Fraction ##兩個整數的四則運算 def c1(q, ans): symbol = random.choice(['+', '-', '*', '/']) # 生成隨機符號 if symbol == '+': n1 = random.randint(0, 20) n2 = random.randint(0, 20) q.append(str(n1) + '+' + str(n2) + '=') ans.append(n1 + n2) elif symbol == '-': n1 = random.randint(0, 20) n2 = random.randint(0, 20) n1,n2 = max(n1,n1),min(n1,n2)#防止出現負數 q.append(str(n1) + '-' + str(n2) + '=') ans.append(n1 - n2) elif symbol == '*': n1 = random.randint(0, 20) n2 = random.randint(0, 20) q.append(str(n1) + '×' + str(n2) + '=') ans.append(n1 * n2) else: n1 = random.randint(0, 20) if n1 == 0: n2 = random.randint(1, 20) else: n2 = random.randint(1, n1 + 1) q.append(str(n1) + '÷' + str(n2) + '=') ans.append(Fraction(n1, n2)) ##隨機生成兩個分數 def createF(): fz1 = random.randint(0, 20) if fz1 == 0: fm1 = random.randint(1, 20) else: fm1 = random.randint(1, 20) f1 = Fraction(fz1, fm1) fz2 = random.randint(1, 20) fm2 = random.randint(20, 20) f2 = Fraction(fz2, fm2) return f1, f2 def f(f):#分數的轉換 a=f.numerator #分子 b=f.denominator #分母 if a%b==0:#為整數 return '%d'%(a/b) elif a<b:#為真分數 return '%d%s%d' % (a,'/',b) else:#為帶分數 c=int(a/b) a = a - c * b return '%d%s%d%s%d' % (c,'’',a,'/',b) ##兩個分數的四則運算 def c2(q,ans): symbol = random.choice(['+','-','*','/']) f1,f2 = createF() if symbol =='+': while f1+f2>1: f1,f2 = createF() q.append(str(f1)+'+'+str(f2)+'=') ans.append(f1+f2) elif symbol =='-': f1,f2 = max(f1,f2),min(f1,f2)#防止出現負數 q.append(str(f1)+'-'+str(f2)+'=') ans.append(f1-f2) elif symbol == '*': while f1*f2>1: f1,f2 = createF() q.append(str(f1)+'×'+str(f2)+'=') ans.append(f1*f2) else: while f1/f2>1: f1,f2=createF() q.append(str(f1)+'÷'+str(f2)+'=') ans.append(Fraction(f1,f2)) def main(): while 1: print("輸入題目的數量", end=' ') k = int(input()) p = 100 / k s = 0 q = [] ans = [] ans2 = [] for i in range(k): n = random.randint(1, 4) if n == 1: c1(q, ans) g = Fraction(ans[i]) ans2.append(f(g)) else: c2(q, ans) g = Fraction(ans[i]) ans2.append(f(g))#記錄帶分數答案 for i in range(k): print("第{}題:{}".format(i + 1, q[i]), end=" ") a = input() if a == str(ans[i]): s = s + p print("所得的分數為:{}".format(s)) print("正確答案:", end=" ") for i in range(k): if str(ans[i]) == str(ans2[i]): print(q[i] + str(ans[i])) else: print("{}{}或{}".format(q[i],str(ans2[i]),str(ans[i]))) if __name__ == '__main__': main()
6)測試運行:
7)你程序中消耗最大的函數:
該函數所需要的空間復雜度最大
def c1(q, ans): symbol = random.choice(['+', '-', '*', '/']) # 生成隨機符號 if symbol == '+': n1 = random.randint(0, 20) n2 = random.randint(0, 20) q.append(str(n1) + '+' + str(n2) + '=') ans.append(n1 + n2) elif symbol == '-': n1 = random.randint(0, 20) n2 = random.randint(0, 20) n1,n2 = max(n1,n1),min(n1,n2)#防止出現負數 q.append(str(n1) + '-' + str(n2) + '=') ans.append(n1 - n2) elif symbol == '*': n1 = random.randint(0, 20) n2 = random.randint(0, 20) q.append(str(n1) + '×' + str(n2) + '=') ans.append(n1 * n2) else: n1 = random.randint(0, 20) if n1 == 0: n2 = random.randint(1, 20) else: n2 = random.randint(1, n1 + 1) q.append(str(n1) + '÷' + str(n2) + '=') ans.append(Fraction(n1, n2)) ##隨機生成兩個分數 def createF(): fz1 = random.randint(0, 20) if fz1 == 0: fm1 = random.randint(1, 20) else: fm1 = random.randint(1, 20) f1 = Fraction(fz1, fm1) fz2 = random.randint(1, 20) fm2 = random.randint(20, 20) f2 = Fraction(fz2, fm2) return f1, f2