源代碼已上傳至Github,https://github.com/chaigee/arithmetic,中的python_ari.py文件python
(1)能自動生成小學四則運算題目,而且不能出現負數;git
(2)能支持真分數的四則運算;github
(1)四則運算加減乘除,採用兩個隨機數,因爲不能出現負數,則對兩個隨機數進行比較大小再進行減法運算,除法一貫特殊,因此在隨機數的取值範圍中設置不包括0。數組
(2)真分數運算在pycharm中導入fractions庫,其他相似。app
from fractions import Fraction
設計三個函數:dom
def newint() 生成整數四則運算函數
def newfra() 生成真分數四則運算工具
def newtest() 生成制定指定數量的四則運算題目學習
函數關係:測試
newint()與newfra()爲獨立的函數,負責生成隨機四則運算,newtest()則隨機調用上述兩個函數生成題目。詳細描述請看下方代碼說明
首先說明整數的四則運算,生成兩個隨機數並隨機運算,在減法中比較大小防止出現負數,在除法中比較大小並循環取整除的隨機數組合。最後輸出算式並返回正確答案。
def newint(): opr = ['+', '-', '×', '÷'] fh = random.randint(0, 3) n1 = random.randint(1, 20) n2 = random.randint(1, 20) rjg = 0 if fh == 0: rjg = n1 + n2 elif fh == 1: n1, n2 = max(n1, n2), min(n1, n2) rjg = n1 - n2 elif fh == 2: rjg = n1 * n2 elif fh == 3: n1, n2 = max(n1, n2), min(n1, n2) while n1 % n2 != 0: n1 = random.randint(1, 10) n2 = random.randint(1, 10) n1, n2 = max(n1, n2), min(n1, n2) rjg = int(n1 / n2) print(n1, opr[fh], n2, '= ', end='') return rjg
真分數四則運算相似。
def newfra(): opr = ['+', '-', '×', '÷'] fh = random.randint(0, 3) t1 = random.randint(1, 10) t2 = random.randint(t1, 10) n1 = Fraction(t1, t2) t1 = random.randint(1, 10) t2 = random.randint(t1, 10) n2 = Fraction(t1, t2) rjg = 0 if fh == 0: rjg = n1 + n2 elif fh == 1: n1, n2 = max(n1, n2), min(n1, n2) rjg = n1 - n2 elif fh == 2: rjg = n1 * n2 elif fh == 3: n1, n2 = max(n1, n2), min(n1, n2) rjg = n1 / n2 print(n1, opr[fh], n2, '= ', end='') return rjg
newtest()函數是要求用戶輸入一個整數來輸出算式的數量,採用while循環隨機生成整數或者真分數運算,將答案保存在rjg列表的同時輸出算式直到算式數量達到要求。最後輸出rjg列表即輸出答案。
def newtest(): opr = ['+', '-', '×', '÷'] print('輸入題庫所須要的題目數量') n=int(input()) rjg=[] m=0 while m<=(n-1): fh = random.randint(0, 4) if fh==0: print(m+1,end='、') rjg.append(newfra()) print(' ') else: print(m+1,end='、') rjg.append(newint()) print(' ') m=m+1 m=0 print('答案:') while m<=(n-1): print(m+1,'、',rjg[m]) m=m+1
下列爲主函數,第一個模式負責調用上述newint()、new函數,並得到函數返回值即算式答案,與用戶輸入值進行比較。第二個模式則是生成算式題目。
print('一、四則運算') print('二、製做題庫') n=int(input()) if n==1: print('input "0000" to Quit') while True: fh = random.randint(0, 4) if fh == 0: rjg = newfra() jg = input() if jg == '0000': break; sr = Fraction(jg) if sr == rjg: print('right') else: print('error. the Tight answer is', rjg) else: rjg = newint() jg = input() if jg == '0000': break; sr = int(jg) if sr == rjg: print('right') else: print('error. the Tight answer is', rjg) if n==2: newtest()
先測試運行第一個模式,以下圖:
第二個模式,先輸出20個算式數量:
輸出1000個算式數量,運行完成且無報錯,部分截圖以下:
因爲本人沒有作過效能分析,在編寫代碼的時候還沒有學習該功能,因此在修改程序的過程當中沒有相關記錄。在改進完程序以後再進行學習效能分析才發現步驟錯了,最終只能對改進後的程序直接進行分析,請諒解。本次分析採用軟件pycharm內置的工具Profile,因爲該工具是隻對程序運行一次再輸出此次運行的效能分析表格(具體功能還沒有弄懂),因此根據本人程序,對newtest()函數輸入10000的整數來輸出10000個算式數量,結果如圖(效能分析表格界面由Name、Call Count、Time(ms)、Own Time(ms) 4列組成。表頭Name顯示被調用的模塊或者函數;Call Count顯示被調用的次數;Time(ms)顯示運行時間和時間百分比,時間單位爲毫秒):
預計耗時(分鐘) | 是實際耗時(分鐘) | ||
Planning | 計劃 | 10 | 10 |
Estimate | 估計這個任務須要多少時間 | / | / |
Development | 開發 | 120 | 240 |
Analysis | 需求分析 | 5 | 10 |
Design Spec | 生成設計文檔 | / | / |
Design Review | 設計複審(和同事審覈設計文檔) | / | / |
Coding Standerd | 代碼規範(爲目前的開發制定合適的規範) | / | / |
Design | 具體設計 | 5 | 10 |
Coding | 具體編碼 | 30 | 60 |
Code Review | 代碼複審 | 5 | 10 |
Text | 測試(自測,修改代碼,提交修改) | 10 | 30 |
Reporting | 報告 | 10 | 20 |
Text Report | 測試報告 | 10 | 20 |
Size Measurement | 計算工做量 | 5 | 5 |
Postmortem & Process Improvement Plan | 過後總結,並提出過程改進計劃 | 5 | 5 |
Sum | 合計 | 215 | 420 |