要求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