20200924-5 四則運算試題生成,結對


要求1 參考《構建之法》第4章兩人合作,結對編程上述功能,要求每人發布隨筆1篇 (代碼是共同完成的,隨筆有以下兩種方式:(①允許兩人寫一份,得一份分數,二人均分;②如果每人寫一份,內容不得抄襲,體會需要是自己的,分別得到自己博客的分數)。

(1) 給出每個功能的重點、難點、編程收獲。

結對編程伙伴:思得 李思源 

開發環境 Windows10 (全程使用李思源同學筆記本開發)

開發工具是 Visual Studio 2019(需安裝Python開發環境,Python版本選擇3.8)

版本控制:Git

Coding:https://e.coding.net/thinkget/wf/f4.git

功能1. 四則運算  功能2. 支持括號 功能4. 支持分數出題和運算 不需要進行文件操作,功能相近,一起完成。

重點:四則運算,支持括號,分數運算

難點:計算順序,括號內先計算,分數與除法的區分。

編程收獲:不局限於固定思維,一般想到計算會用棧來完成,但本題說4個數字,用窮舉暴力就可以很好完成。還學會了python隨機數的使用,用隨機數表示運算符,生成隨機的測試數字等。

def random_yunsuan(a, b, t, side=0):#進行運算和位置關系處理
    if side==0:
        if t==1:
            return a+b
        elif t==2:
            return a-b
        elif t==3:
            return a*b
        elif t==4:
            return a/b
    elif side==1:
        if t==1:
            return b+a
        elif t==2:
            return b-a
        elif t==3:
            return b*a
        elif t==4:
            return b/a

def build_question():是產生算術題的程序,采用暴力實現,代碼邏輯簡單,代碼量較大,讀者可以從git倉庫獲取源碼自行閱讀。

測試截圖:

功能3. 限定題目數量,"精美"打印輸出,避免重復

重點:限定題目數量

難點:文件操作,寫入到txt中。

編程收獲:加強了python文件的讀寫操作理解。

def output(x):
    integer = "請輸入正整數。"
    try:
        x = int(x)
        if x >= 0:
            data=open("data.txt",'w+')
            for i in range(x):
                suan_shi, sum=build_question()
                suan_shi =suan_shi + "="
                zs=(int)(sum.numerator/sum.denominator)
                fs=sum-zs
                if fs==Fraction(0, 1):
                    #print(suan_shi.ljust(40), str(zs))
                    print ('{:<30}{:<20}' .format(suan_shi,str(zs)),file=data)
                elif zs==0 and fs!=Fraction(0, 1):
                    #print(suan_shi.ljust(40), str(fs))
                    print ('{:<30}{:<20}' .format(suan_shi,str(fs)),file=data)
                else:
                    if fs<Fraction(0, 1):
                        fs=-fs
                    #print(suan_shi.ljust(40), str(zs)+" "+str(fs))
                    print ('{:<30}{:<20}' .format(suan_shi,str(zs)+" "+str(fs)),file=data)
            data.close()
        else:
            print(integer)
    except:
        print(integer)
    return(0)

 測試截圖:

功能5 未來

PyQt可以很方便的將Python代碼實現成GUI模式,直接調運相應函數即可實現。

(2)結對編程的體會

在這次結對編程中,兩個人合作編寫代碼可以高效的進行開發,因為結對編程讓兩個人寫的代碼不斷處於“復審”過程,發現小錯誤可以及時改正,因為代碼要兩個人看,所以代碼也更加規范。而且兩個人編程會有更多“奇思妙想”,我想用棧實現,李思源同學指出暴力法實現更加簡潔。在這里我要對李思源同學表示感謝,感謝李思源同學治好了我的“拖延症”,拉着我在假期之前完成了這次作業,我本來想假期在寫的,事實也證明了假期是不可能寫作業的,從這幾天就能看出,一放假立馬進入“小埋”模式,今天總算是意識到自己有多頹廢(其實是很無聊,不知道該干啥),開始寫博客,而李思源同學在完成編程后第一時間就發布博客了,對不起,嚴重拖了團隊的后腿。

(3) 至少5項在編碼、爭論、復審等活動中花費時間較長,給你較大收獲的事件。 (10分)

1. 開發前,就開發技術、環境等進行討論。

我熟悉Python,而李思源同學熟悉C#,對於我來說學習C#時間成本過高,感謝李思源同學的遷就,更佩服李思源同學學習能力,Python比我寫的都好。

2.代碼邏輯

我想借鑒題目里隱晦提出的逆波蘭表達式,結合棧來實現,李思源同學提出:題目要求里提出只有4個數字運算,采用暴力法代碼邏輯更清晰,也更容易實現。很佩服他的編程思維,化繁為簡。

3.代碼規范

李思源同學是C#大神,但總是習慣於在最后加“;”號,我覺得以后從事的研究里Python用的會更多,提醒了李思源同學“習慣性”操作。

4.Python隨機數的使用

第一次接觸Python隨機數,並通過查閱資料學會了如何使用。

5.命令行參數的使用,代碼雖然使用編輯器寫的,但程序是交付用戶使用,命令行參數很重要。

要求2 給出結對開發的截圖證據,要求截圖能夠證明你們是在結對編程。 (5分)

 

圖片由學長幫忙拍攝,結對編程地點:自習室。

要求3 使用coding.net做版本控制。

https://e.coding.net/thinkget/wf/f4.git

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM