【考試反思】聯賽模擬測試9
此作業要求參見:https://edu.cnblogs.com/campus/nenu/2020Fall/homework/11245
結對夥伴:李超
功能1. 四則運算
支援出題4個數的四則運算題目,所有題目要求作者有能力正確回答 (提示:1/3 != 0.33333333333333333333333333333333,而是無限長)。
為了快出成果,你快速造個控制檯的版本,包括以後改版成更優秀介面的核心功能,並考慮到擴充套件。
你在老師面前作如下表演 (數字你用excel驗算過了,UI的賣萌部分你還沒有想好) 。
> f4
1+2*3+4=
?11
答對啦,你真是個天才!
1+2*3+5=
?11
再想想吧,答案似乎是12喔!
1+2/4-5=
?-3.5
答對啦,你真是個天才!
...(一共20道題)
你一共答對4道題,共20道題。
完成這個功能,老師對你的信任值+10.
支援出題4個數的四則運算題目,所有題目要求作者有能力正確回答 (提示:1/3 != 0.33333333333333333333333333333333,而是無限長)。
為了快出成果,你快速造個控制檯的版本,包括以後改版成更優秀介面的核心功能,並考慮到擴充套件。
你在老師面前作如下表演 (數字你用excel驗算過了,UI的賣萌部分你還沒有想好) 。
功能二題目:
老師看了你的表演,大大讚賞了你。然後她說,"你的題庫裡怎麼都是沒有括號的題呢,我記得你當初括號就掌握得不好啊。"你的臉紅了,對老師說,"給我2個小時時間,我給你一個新版本,有括號的。"
你拿出筆記本,偷偷微信你們《構建之法》班的學霸,她說肯定能行,但是細節訊號不好你聽不清,只捕捉到隱約幾個詞"逆波蘭""字尾表示式""堆疊""我看好你""資料結構"。
兩小時後,在老師面前你在控制檯下輸入f4,然後回車。
執行程式碼如下:
def function1(): right = 0 i = 0 while i in range(20): i = i + 1 equation = create_formula() re_equation = reverse_polish(equation) result = calculate(re_equation) answer0 = result if result is False or result isNone or len(str(result)) > 12: i = i - 1 continue str_equation = " ".join('%s' % id for id in equation) print(str_equation + "=") print("?", end="") answer = float(input()) if abs(result - int(result)) < 1.0e-16: result = int(result) if answer == answer0: print("答對啦,你真是個天才!") right = right + 1 else: print("再想想吧,答案似乎是" + repr(result) + "喔!") print("你一共答對" + repr(right) + "道題,共20道題。")
執行結果如下:
功能3. 限定題目數量,"精美"列印輸出,避免重複
"就這點兒題,像你當年做得那麼快,一會兒就完成啦!"老師說,"另外,我想打印出來,上課也不能帶臺機器。又另外,你把答案也打出來唄,我把答案剪掉,題目給學生做。"
一看需求這麼多,你生怕她會說,"這都是很簡單的功能,你一定能完成吧"。你知道如果承諾今晚,明早交工的時候她一定想出了更多可怕的需求,你趕緊說,"老師我現在就做。"
你忘記怎麼呼叫印表機了,就把答案與題目橫向對齊,輸出在檔案的右邊。告訴老師txt檔案可以用WORD開啟,也能列印。她滿意而意味深長地笑了,表示同意。
你輸入命令執行的時候,腦袋比手指頭還疼。
執行程式碼如下:
ef function3(n): n = int(n) i = 0 while i in range(n): i = i+1 equation = create_formula() re_equation = reverse_polish(equation) result = calculate(re_equation) if result is False or result is None or len(str(result)) > 12: i = i-1 continue if i is 1: if os.path.exists('result.txt'): os.remove('result.txt') write_file(equation, result)
執行結果如下:
功能4. 支援分數出題和運算
國慶節後,你終於又回到美麗優雅並且正常的東北師範大學淨月校區,在去食堂的路上偶遇你心目中的女神 (或男神,請自行替換)。她說,"哎呀,這跟我們《構建之法》課上的題目要求一樣啊,真是巧合。"
"不要客氣,程式碼拿去!反正我也沒用。"你說,"如果有需求變更或擴充套件,儘管找我。"
你伏筆埋得不錯。女神馬上說,"對啊,有一點兒點兒不一樣,你午飯時間加加班幫我改出來吧。"
她的題目還要求支援分數運算,你不禁想到了功能1中你特意規避了一些題目不出。她想要的是下面的樣子:
此功能需要引用新的包,完成此功能學會了使用fraction函式的一些功能。
關鍵函式使用如下:
from fractions import Fraction a = Fraction('3.1415926535897932').limit_denominator(1000)
要求1參考《構建之法》第4章兩人合作,結對程式設計上述功能,要求每人釋出隨筆1篇 (程式碼是共同完成的,隨筆有以下兩種方式:(①允許兩人寫一份,得一份分數,二人均分;②如果每人寫一份,內容不得抄襲,體會需要是自己的,分別得到自己部落格的分數)。 (1) 給出每個功能的重點、難點、程式設計收穫。(2)給出結對程式設計的體會,以及 (3) 至少5項在編碼、爭論、複審等活動中花費時間較長,給你較大收穫的事件。 (10分)
(1)功能一、二重點和難點:
重點:功能一和二的基本執行規則相似,所以放在一起說,首先在生成隨機的題目之前需要定義好加減乘數的優先順序,其次就是需要設立一個棧,為中綴表示式轉字尾表示式做準備,然後的重點就是計算字尾表示式的這一步,需要判斷表示式中的括號,如果有括號,需要先計算括號內的公式,然後才能繼續計算字尾表示式。
難點:如何生成隨機的表示式,還有在後面的計算字尾表示式都是難點。
收穫:在編寫這兩個功能前,我查閱了很多類似CSDN這樣的網站,學會了如何用python語言建立一棧,運用random類隨機生成一個表示式。
功能三重點和難點:
重點:功能三的重點是如何在命令列讀取命令列引數,同時還要判斷所生成的題目的數量是否符合要求,對於小數和負數都輸需要輸出提示語句的,其次就是需要將生成的表示式寫入到本地的txt檔案中。
難點:怎麼樣將生成的表示式寫入到本地的檔案中是一個難點。
收穫:通過查閱相關的網站等,學會了如何使用python語言生成一個文字檔案,並且使用with open()將生成的隨機公式寫入到本地檔案當中。
(2)結對程式設計的體會:這次程式設計我認識到了自己專業知識的不足,對於python的一些方法和類庫還是不太熟悉,在編碼的過程中我們都是在邊寫程式碼邊查資料,感覺很慢。同時,我也認識到了多一個人程式設計的重要性,首先旁邊的同學可以在看你程式設計的時候給你指出來一些程式設計上的缺陷,其次在遇到一個難點時不只是去自己查資料,還可以兩個人一起討論,集思廣益。
(3)①討論時間較長的功能包括上述的功能一二三的所討論的重點和難點,但是最大的收穫就是對於括號到底是怎麼樣生成,用什麼方法生成進行了討論。②用random生成,③用列舉生成,思前想後還是決定用隨機類生成④是否用一臺電腦⑤完成優先還是完美優先
要求2給出結對開發的截圖證據,要求截圖能夠證明你們是在結對程式設計。 (5分)
要求3使用coding.net做版本控制。checkin 前要求清理 臨時檔案、可執行程式,通常執行 build-clean可以達到效果。(25分)