
軟體生命週期 (software life cycle) 分成三大階段,開發 (development) 、使用 (use) 、修改 (modification) ,接下來便是使用、修改的無限循環

開發階段,自然免不了對需求的分析 (analysis) ,然後設計 (design) 、建置 (implement) ,接著進行測試 (testing) ,其實這順序沒有絕對,「設計」與「建置」可能只是先做個簡單版本,「測試」與「使用」說到底都是實際執行後觀察結果,「修改」等於以之前的基礎再次「設計」與重新「建置」。
我們打算開發的 Encrypt 類別 (class) 的需求已經很清楚,也就是產生一個英文小寫字母的對照字串 (string) ,我們用 code 屬性 (attribute) 儲存這個字串,然後以 setcode() 方法 (method) 建立這個字串。
上個單元中,我們將 a 設定為 3 , b 設定為 5 ,順利的跑出一個英文小寫字母的對照字串,現在我們希望把 a 、 b 設定成 0 到 9 之間的隨機整數,這該怎麼做呢?簡單講,就是要有個產生隨機整數的方式,還好標準模組庫 (standard library) 中已經有相關程式供我們直接使用,因此我們不需要自己重頭開發。
標準模組庫中 random 的 randint() 可產生指定範圍的隨機整數,因此原本的程式檔案修改如下
| 001 | # 使用 randint() |
| 002 | import random |
| 003 | |
| 004 | # 定義 Encrypt 類別 |
| 005 | class Encrypt: |
| 006 | def __init__(self): |
| 007 | self.setcode() |
| 008 | |
| 009 | def setcode(self): |
| 010 | # 取得 a 、 b 值 |
| 011 | a = random.randint(0, 9) |
| 012 | b = random.randint(0, 9) |
| 013 | |
| 014 | # 利用公式建立密碼表 |
| 015 | self.code = "" |
| 016 | c = "a" |
| 017 | i = 0 |
| 018 | while i < 26: |
| 019 | x = c |
| 020 | y = ord(x) * a + b |
| 021 | m = y % 26 |
| 022 | self.code += chr(m + 97) |
| 023 | c = chr(ord(c) + 1) |
| 024 | i += 1 |
| 025 | |
| 026 | def getcode(self): |
| 027 | return self.code |
| 028 | |
| 029 | # 編碼的方法 |
| 030 | def toEncode(self, str): |
| 031 | pass |
| 032 | |
| 033 | # 解碼的方法 |
| 034 | def toDecode(self, str): |
| 035 | pass |
| 036 | |
| 037 | # 測試部分 |
| 038 | if __name__ == '__main__': |
| 039 | e = Encrypt() |
| 040 | print() |
| 041 | print(e.getcode()) |
| 042 | print() |
| 043 | |
| 044 | # 檔名: encrypt03.py |
| 045 | # 作者: Kaiching Chang |
| 046 | # 時間: July, 2014 |
程式開始先 import random 模組 (module)
| 001 | # 使用 randint() |
| 002 | import random |
然後利用 ranint() 取得 a 、 b 值,由於要 0 到 9 的隨機整數,因此第一個參數 (parameter) 為 0 ,第二個參數為 9
| 010 | # 取得 a 、 b 值 |
| 011 | a = random.randint(0, 9) |
| 012 | b = random.randint(0, 9) |
其他部分都沒改,來測試看看囉

看起來還不錯,再多測試幾次看看

居然有一行都是 'b' ,有些是我們要的密碼表沒錯,有一些則不是,那表示我們所用的數學公式有問題,接下來要先修正數學公式。
中英文術語對照
| 軟體生命週期 | software life cycle |
| 開發 | development |
| 使用 | use |
| 修改 | modification |
| 分析 | analysis |
| 設計 | design |
| 建置 | implement |
| 測試 | testing |
| 類別 | class |
| 字串 | string |
| 屬性 | attribute |
| 方法 | method |
| 標準模組庫 | standard library |
| 模組 | module |
| 參數 | parameter |
重點整理
- 軟體的生命週期分成開發、使用、修改三大階段。
- 開發階段就是對需求分析,然後設計、建置、測試等等。
- 標準模組庫中 random 的 randint() 可產生指定範圍的隨機整數。
- 設計、建置完軟體的初始版本就進行測試,如果有問題,就重新檢視設計, Encrypt 的數學公式有問題,因此要研究問題出在哪,再回頭修改程式。
問題與討論
- 軟體的生命週期分成哪些階段?
- 設計軟體的時候,該不該重視使用者的體驗經驗?
- 想一想, Encrypt 的數學公式問題可能發生在哪裡?該如何修正呢?
練習
- 承接上一個單元的猜數字遊戲,將新程式寫在 exercise1601.py 中,把測試答案與猜測陣列的部份寫在函數 test() 裡,結果回傳布林值。
- 承上題,設計一個函數 ab_counter() 計算 A 、 B 值,用另一個 ab_array 串列紀錄 A 、 B 值,若使用者沒用猜對就印出A 、 B 值,將新程式寫在 exercise1602.py 中。
- 承上題,加入迴圈直到使用者猜對答案為止,將新程式寫在 exercise1603.py 中。
the end
沒有留言:
張貼留言