分解質因數
此作業要求參見:https://edu.cnblogs.com/campus/nenu/2020Fall/homework/11245
結對夥伴:魏琛
功能1. 四則運算
支援出題4個數的四則運算題目,所有題目要求作者有能力正確回答 (提示:1/3 != 0.33333333333333333333333333333333,而是無限長)。
重難點:由於題目的要求,算式是隨機生成的,所以要隨機生成運算子和數字,又因為是隨機生成數字,我們應該保證結果正確性即分母不可以為零。我們可以使用python中的方法,fraction有分數的表達和計算,randint隨機生成整數,uniform隨機生成浮點數。
功能2. 支援括號
重難點:括號的位置是否正確,如何匹配。
功能一功能二程式碼:
#by: psy_yp class f4(object): def __init__(self): #初始化新建物件 pass """ 功能1、2:實現含有括號的四則運算 """ def _f4(self): from random import randint as r #直接匯入randint函式,更名為r from random import uniform as ru #直接匯入uniform函式,更名為ru,用於生成指定範圍內的隨機浮點數from fractions import Fraction as f #直接匯入fractions函式,更名為f ops = ['+', '-', '*', '/'] #儲存操作符 kuohao = ['(', '', ')'] #儲存括號,下標為0,1,2 left1 = r(0, 1) left2 = r(0, 1) left3 = r(0, 1) right1 = r(1, 2) right2 = r(1, 2) right3= r(1, 2) if left1 == 0: left2 = 1 left3 = 1 if right1 == 2: right2 = 1 right3 = 1 else: right2 = 2 right3 = 1 else: if left2 == 0: left3 = 1 right1 = 1 if right2 == 2: right3 = 1 else: right3 = 2 else: left3 = 0 right1 = 1 right2 = 1 right3 = 2 add_1 = ru(0, 1) add_1 = f(add_1).limit_denominator(10)#限制最大分母值,小數變分數 add_2 = ru(0, 1) add_2 = f(add_2).limit_denominator(10) add_3 = r(1, 10) add_4 = r(1, 10) ops1 = r(0, 2) ops2 = r(0, 3) ops3 = r(0, 3) #由上述操作,隨機生成表示式 eq = kuohao[left1] + str(add_1) + ops[ops1] + kuohao[left2] + str(add_2) +kuohao[right1] + ops[ops2] + kuohao[left3] + str(add_3) + kuohao[right2] + ops[ops3] + str(add_4) + kuohao[right3] return (eq) def _f4_answer(self,eq): from fractions import Fraction as f answer1 = f(eval(eq)).limit_denominator(1000) answer1 = str(answer1) return(answer1) def _f4_input(self): try: yes= 0 no = 0 for i in range(20): #輸出20道題,分別判斷輸入結果與正確答案是否相同,按要求輸出 _eq = f4()._f4() print(_eq, "=") _ans_right = f4()._f4_answer(eq = _eq) _ans = input("?") if _ans == _ans_right: print("答對啦,你真是個天才!") yes = yes+ 1 else: print("再想想吧,答案似乎是", _ans_right, "喔!") no= no + 1 print("你一共答對", yes, "道題,共20道題。") except: print("輸入有誤") return (0)
效果截圖:
功能3. 限定題目數量,"精美"列印輸出,避免重複
功能4. 支援分數出題和運算
重難點:如何規範輸出,避免重複,隨機生成題目是重點。
def _f4_integer_parser(self,x): _p = "題目數量必須是 正整數。" try: x = int(x) if x >= 0: for i in range(x): _eq = f4()._f4() _right = f4()._f4_answer(eq = _eq) _eq = _eq + "=" print(_eq.ljust(40), _right)#方法返回一個原字串左對齊,並使用空格填充至指定長度的新字串。如果指定的長度小於原字串的長度則返回原字串。 else: print(_p) except: print(_p) return(0)
效果截圖:
功能5未來
還有可能把程式改造成GUI版,把程式改造為web版,把程式移植為android/ios版。今天留好介面,明天就不發愁。 (0分)
要求1參考《構建之法》第4章兩人合作,結對程式設計上述功能,要求每人釋出隨筆1篇 (程式碼是共同完成的,隨筆有以下兩種方式:(①允許兩人寫一份,得一份分數,二人均分;②如果每人寫一份,內容不得抄襲,體會需要是自己的,分別得到自己部落格的分數)。 (1) 給出每個功能的重點、難點、程式設計收穫。(2)給出結對程式設計的體會,以及 (3) 至少5項在編碼、爭論、複審等活動中花費時間較長,給你較大收穫的事件。 (10分)
(1)重難點已在各功能前給出
(2)結對程式設計體會:
這是第一次結對程式設計,也是一次嘗試,我的程式設計能力比較弱,很怕拖對方後腿,但實際情況中相處的很融洽,總體的效率也有一些提升,遇到問題也懂得一起解決,也瞭解了自身的弱點所在,這次經歷,也讓我們感受到了團隊的結合是多麼重要,也能從同伴身上學到很多自己沒有的點。
(3)至少5項在編碼、爭論、複審等活動中花費時間較長,給你較大收穫的事件。
1)程式語言的選擇:我們兩人對於python是比較瞭解的,python用起來也更方便,所以選擇了這門語言。
2)程式碼的規範:這是我們共同商量決定的,剛剛開始還是會犯很多錯誤。
3)功能的完善:在許多細節方面還是考慮了很久。
4)特殊情況:做除法運算時,最開始情況沒考慮完全。
5)函式呼叫:也看了官方文件,在搜尋引擎中查詢函式如何使用。
要求2給出結對開發的截圖證據,要求截圖能夠證明你們是在結對程式設計。 (5分)
截圖:
要求3使用coding.net做版本控制。checkin 前要求清理 臨時檔案、可執行程式,通常執行 build-clean可以達到效果。(25分)
雖然只有5分,但此題如果做錯,因為教師得不到你的程式碼,所以會導致“功能實現”為負分。
程式碼要求在 coding.net 做版本控制。要求push&pull時使用git客戶端,不允許使用web頁面。
要求頻繁checkin。要求在PSP中記錄的每次離開鍵盤30分鐘以上,需要checkin。如果你持續長達4小時不離開鍵盤,教師要求展示此項能力。量化的可考核的指標要求: 每個功能,要求有4次以上 checkin,展示(1)逐步實現功能和(2)修復bug時的過程; 每次checkin都要求可以成功編譯。
推薦git客戶端tortoisgit。
推薦先pull [https://github.com/weijunying2019102969/novelsfortest.git],裡面有測試用例。
coding地址:https://e.coding.net/weichenaa/f4/f4.git