1. 程式人生 > >軟件工程——四則運算py(我小學的時候怎麽沒用過這東西?)

軟件工程——四則運算py(我小學的時候怎麽沒用過這東西?)

範圍 img clas 算術表達式 函數 怎麽 兩個 沒有 方向

題目:實現一個自動生成小學四則運算題目的命令行程序

github地址:https://github.com/ILTHEW/wc.git

主編:黃暉朝3116005178

助手:朱健棟3116005209

說明:

自然數:0, 1, 2, …。

? 真分數:1/2, 1/3, 2/3, 1/4, 1’1/2, …。

? 運算符:+, ?, ×, ÷。

? 括號:(, )。

? 等號:=。

? 分隔符:空格(用於四則運算符和等號前後)。

? 算術表達式:

e = n | e1 + e2 | e1 ? e2 | e1 × e2 | e1 ÷ e2 | (e),
其中e, e1和e2為表達式,n為自然數或真分數。

? 四則運算題目:e = ,其中e為算術表達式。

3需求:

  1. 使用 -n 參數控制生成題目的個數,例如

Myapp.exe -n 10

將生成10個題目。

  1. 使用 -r 參數控制題目中數值(自然數、真分數和真分數分母)的範圍,例如

Myapp.exe -r 10

將生成10以內(不包括10)的四則運算題目。該參數可以設置為1或其他自然數。該參數必須給定,否則程序報錯並給出幫助信息。

  1. 生成的題目中計算過程不能產生負數,也就是說算術表達式中如果存在形如e1 ? e2的子表達式,那麽e1 ≥ e2。
  2. 生成的題目中如果存在形如e1 ÷ e2的子表達式,那麽其結果應是真分數。
  3. 每道題目中出現的運算符個數不超過3個。
  4. 程序一次運行生成的題目不能重復,即任何兩道題目不能通過有限次交換+和×左右的算術表達式變換為同一道題目。例如,23 + 45 = 和45 + 23 = 是重復的題目,6 × 8 = 和8 × 6 = 也是重復的題目。3+(2+1)和1+2+3這兩個題目是重復的,由於+是左結合的,1+2+3等價於(1+2)+3,也就是3+(1+2),也就是3+(2+1)。但是1+2+3和3+2+1是不重復的兩道題,因為1+2+3等價於(1+2)+3,而3+2+1等價於(3+2)+1,它們之間不能通過有限次交換變成同一個題目。
    生成的題目存入執行程序的當前目錄下的Exercises.txt文件,格式如下:

  5. 四則運算題目1
  6. 四則運算題目2
    ……

其中真分數在輸入輸出時采用如下格式,真分數五分之三表示為3/5,真分數二又八分之三表示為2’3/8。

  1. 在生成題目的同時,計算出所有題目的答案,並存入執行程序的當前目錄下的Answers.txt文件,格式如下:

  2. 答案1
  3. 答案2

特別的,真分數的運算如下例所示:1/6 + 1/8 = 7/24。

  1. 程序應能支持一萬道題目的生成。
  2. 程序支持對給定的題目文件和答案文件,判定答案中的對錯並進行數量統計,輸入參數如下:

Myapp.exe -e

統計結果輸出到文件Grade.txt,格式如下:

Correct: 5 (1, 3, 5, 7, 9)
Wrong: 5 (2, 4, 6, 8, 10)

其中“:”後面的數字5表示對/錯的題目的數量,括號內的是對/錯題目的編號。為簡單起見,假設輸入的題目都是按照順序編號的符合規範的題目。


未實現的功能

  1. 程序支持對給定的題目文件和答案文件,判定答案中的對錯並進行數量統計
  2. 生成的題目中計算過程不能產生負數,也就是說算術表達式中如果存在形如e1 ? e2的子表達式,那麽e1 ≥ e2
  3. 生成的題目中如果存在形如e1 ÷ e2的子表達式,那麽其結果應是真分數。
  4. 程序一次運行生成的題目不能重復,即任何兩道題目不能通過有限次交換+和×左右的算術表達式變換為同一道題

    遇到的問題

    和我合作的小夥伴是用python的,而我比較偏向java,最終由於我技術不過硬,就用了python.
    起初在思考怎麽樣隨機生成運算符,生成運算符後怎麽生成該種運算符的答案,後來上網發現,python的函數庫中有這個函數,只要方便地調用就可以了。後來不知道怎麽生成文檔,後來上網查了一下,發現又是調用函數就可以了。就這樣兩個人慢慢地做了出來。

PSP表

技術分享圖片

效能分析

算法運行過程比較慢,沒有使用數據結構進行優化,大量使用庫函數,導致結果運行緩慢

設計實現過程

首先就是實現整數的四則運算,

然後就考慮分數的四則運算,

最後生成題目和答案到兩個文件中。

代碼說明

技術分享圖片

測試運行

一般

技術分享圖片
技術分享圖片

一萬道題目

技術分享圖片
技術分享圖片
技術分享圖片
技術分享圖片
技術分享圖片

小結

兩個人在一起探討比一個人快很多,有效率很多,有時候一個人看不到的問題,另一個人可以看出來並及時地提醒。有什麽不懂的地方就可以找度娘。兩個人都從沒有頭緒開始,慢慢地找到了方向。這個看起來很簡單的項目,對於我來說,是個不小的挑戰,這也證明了我的水平還有待提高。一直害怕這個自己不熟悉的東西,不願意去挑戰它,最後只能在deadline前徹夜奮戰,這種感覺不怎麽好。還有就是,拖延癥害死人。

軟件工程——四則運算py(我小學的時候怎麽沒用過這東西?)