結(jié)對(duì)項(xiàng)目——小學(xué)四則運(yùn)算題目自動(dòng)生成器
| 這個(gè)作業(yè)屬于哪個(gè)課程 | <計(jì)科22級(jí)34班> |
|---|---|
| 這個(gè)作業(yè)要求在哪里 | <結(jié)對(duì)項(xiàng)目> |
| 這個(gè)作業(yè)的目標(biāo) | <實(shí)現(xiàn)一個(gè)自動(dòng)生成小學(xué)四則運(yùn)算題目的命令行程序(也可以用圖像界面,具有相似功能)> |
| 團(tuán)隊(duì)成員 | <楊富國(guó)(3122004587)、李思柔(3222004638)> |
| Github項(xiàng)目地址 | https://github.com/wWchao-111/Myapp |
一、PSP表
| PSP2.1 | Personal Software Process Stages | 預(yù)估耗時(shí)(分鐘) | 實(shí)際耗時(shí)(分鐘) |
|---|---|---|---|
| Planning | 計(jì)劃 | 90 | 90 |
| · Estimate | · 估計(jì)這個(gè)任務(wù)需要多少時(shí)間 | 45 | 60 |
| Development | 開發(fā) | 120 | 150 |
| · Analysis | · 需求分析 (包括學(xué)習(xí)新技術(shù)) | 60 | 60 |
| · Design Spec | · 生成設(shè)計(jì)文檔 | 60 | 60 |
| · Design Review | · 設(shè)計(jì)復(fù)審 | 60 | 60 |
| · Coding Standard | · 代碼規(guī)范 (為目前的開發(fā)制定合適的規(guī)范) | 60 | 60 |
| · Design | · 具體設(shè)計(jì) | 60 | 60 |
| · Coding | · 具體編碼 | 30 | 30 |
| · Code Review | · 代碼復(fù)審 | 30 | 30 |
| · Test | · 測(cè)試(自我測(cè)試,修改代碼,提交修改) | 180 | 150 |
| Reporting | 報(bào)告 | 60 | 60 |
| · Test Repor | · 測(cè)試報(bào)告 | 60 | 60 |
| · Size Measurement | · 計(jì)算工作量 | 10 | 10 |
| · Postmorte· 合計(jì)m & Process Improvement Plan | · 事后總結(jié), 并提出過(guò)程改進(jìn)計(jì)劃 | 30 | 30 |
| · 合計(jì) | 955 | 970 |
二、設(shè)計(jì)實(shí)現(xiàn)過(guò)程
共7個(gè)模塊:
main():用于命令行輸入輸出的對(duì)接,包含整體運(yùn)行邏輯、表達(dá)式的寫入寫出和答案比對(duì)。
random_fraction():隨機(jī)生成一個(gè)數(shù),可能是分?jǐn)?shù)也可能是整數(shù)。
random_expression():生成全部表達(dá)式。
is_valid():判斷生成的表達(dá)式是否合理。
genetate_expressions():生成最終的總表達(dá)式。
evaluate():計(jì)算表達(dá)式的值。
grade():比對(duì)題目和答案是否正確。
流程圖:

三、代碼說(shuō)明:
1.核心代碼:

2.分析:
生成隨機(jī)數(shù)random_fraction():
定義一個(gè)函數(shù)random_fraction(max_denominator),用于生成一個(gè)隨機(jī)數(shù)。
此函數(shù)接收一個(gè)最大分母值 max_denominator,生成一個(gè)隨機(jī)分?jǐn)?shù)。分子的范圍從 0 到 max_denominator - 1,而分母則從 1 到 max_denominator(避免分母為零)。
函數(shù)內(nèi)部使用random.randint()生成兩個(gè)隨機(jī)整數(shù)作為分子和分母,然后使用fractions.Fraction()創(chuàng)建一個(gè)分?jǐn)?shù)對(duì)象并返回。
生成表達(dá)式random_expression():
定義一個(gè)函數(shù)random_expression(max_denominator, max_operators),用于生成一個(gè)隨機(jī)的數(shù)學(xué)表達(dá)式。
此函數(shù)接收兩個(gè)參數(shù):max_denominator表示分母的最大值,max_operators表示操作符的最大數(shù)量。
函數(shù)首先生成一個(gè)隨機(jī)分?jǐn)?shù)作為表達(dá)式的第一個(gè)元素,然后在循環(huán)中隨機(jī)選擇操作符(加、減或乘)并生成另一個(gè)隨機(jī)分?jǐn)?shù),將它們添加到表達(dá)式中,最后返回生成的表達(dá)式字符串。(操作符的數(shù)量在 1 到 max_operators之間隨機(jī)決定)
檢查表達(dá)式合法性is_valid():
定義一個(gè)函數(shù)is_valid(expression),用于檢查表達(dá)式是否合法。
這個(gè)函數(shù)接受一個(gè)表達(dá)式字符串作為參數(shù),將其分割成各個(gè)部分,然后檢查每個(gè)操作符前后的分?jǐn)?shù)是否符合四則運(yùn)算的規(guī)則。例如,如果操作符是-,那么應(yīng)確保被減數(shù)不小于減數(shù);如果操作符是/,那么應(yīng)確保除數(shù)不為零。如果所有操作符都符合規(guī)則,則返回True,否則返回False。
四、測(cè)試運(yùn)行
測(cè)試模塊代碼:

五、運(yùn)行結(jié)果


Exercises.txt(題目數(shù)量:10,范圍:10)是題目。
Answers.txt是答案。
Grade.txt是結(jié)果。
用生成的題目文件和答案文件做比對(duì)測(cè)試:
交換第3題和第4題的答案后,grade輸出第3、4題錯(cuò)誤,其余正確:

六、效能分析

由此可以看出:生成隨機(jī)數(shù)random_fraction是最耗時(shí)的。
七、項(xiàng)目小結(jié)
楊富國(guó):
經(jīng)過(guò)這次項(xiàng)目,我深刻了解到一個(gè)設(shè)計(jì)文檔的重要性,當(dāng)對(duì)項(xiàng)目進(jìn)行分析設(shè)計(jì)模塊的大體框架后,代碼實(shí)現(xiàn)的進(jìn)度就快了許多,剩下的更多是模塊功能的微調(diào)與測(cè)試。
第一次的結(jié)對(duì)項(xiàng)目更讓我感受到了團(tuán)隊(duì)合作中分工與溝通的重要性,明確的分工讓我們可以節(jié)省很多時(shí)間,也讓我們感受到了團(tuán)隊(duì)合作中交流的重要性
李思柔:
這是我第一次與人合作完成一個(gè)項(xiàng)目,剛開始又有點(diǎn)不適應(yīng),但在一次次磨合中我們還是完成了這次結(jié)對(duì)項(xiàng)目,我意識(shí)到在團(tuán)隊(duì)工作中共同協(xié)作和溝通的重要性,也發(fā)現(xiàn)兩個(gè)人想問(wèn)題和做決策比一個(gè)人的效率要快得多。感謝我的搭檔!是他幫助了我很多才完成這次結(jié)對(duì)項(xiàng)目,本人在此鄭重鳴謝!

浙公網(wǎng)安備 33010602011771號(hào)