1. 程式人生 > 實用技巧 >分解質因數

分解質因數

此作業要求參見: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