<dd id="sga4y"><optgroup id="sga4y"></optgroup></dd>
<nav id="sga4y"><code id="sga4y"></code></nav>
  • <optgroup id="sga4y"></optgroup>

    第 13 章 單元測試

    13.1. 羅馬數字程序介紹 II

    在前面的章節中,通過閱讀代碼,你迅速“深入”,以最快的速度理解了各個程序。既然你已對 Python 有了一定的了解,那么接下來讓我們看看程序開發之前 的工作。

    在接下來的幾章中,你將會編寫、調試和優化一系列工具函數來進行羅馬數字和阿拉伯數字之間的轉換。你已從第 7.3 節 “個案研究:羅馬字母”中獲知構造和驗證羅馬數字的機制,現在我們要做的事是退后一步去思考如何將這些機制擴展到一個雙向轉換的工具。

    羅馬數字的規則有如下一些有趣的特點:

    1. 一個特定數字以羅馬數字表示時只有單一方式。
    2. 反之亦然:一個有效的羅馬數字表示的數也只對應一個阿拉伯數字表示。(也就是說轉換成阿拉伯數字表示只有一種方法。)
    3. 我們研究的是 13999 之間的數字的羅馬數字表示。(羅馬數字有很多方法用以記錄更大的數,例如在數字上加線表示1000倍的數,但你不必去理會這些。就本章而言,我們姑且把羅馬數字限定在 13999 之間)。
    4. 羅馬數字無法表示 0。(令人詫異,古羅馬竟然沒有 0 這個數字的概念。數字是為數數服務的,沒有怎么數呢?)
    5. 羅馬數字不能表示負數。
    6. 羅馬數字無法表示分數和非整數。

    基于如上所述,你將如何構造羅馬數字轉換函數呢?

    roman.py 功能需求

    1. toRoman 應該能返回 13999 中任意數的羅馬數字表示。
    2. toRoman 在遇到 13999 之外的數字時應該失敗。
    3. toRoman 在遇到非整數時應該失敗。
    4. fromRoman 應該能將給定的有效羅馬數字表示轉換為阿拉伯數字表示。
    5. fromRoman 在遇到無效羅馬數字表示時應該失敗。
    6. 將一個數轉換為羅馬數字表示,再轉換回阿拉伯數字表示后應該和最初的數相同。因此,fromRoman(toRoman(n)) == n 對于 1..3999 之間所有 n 都適用。
    7. toRoman 返回的羅馬數字應該使用大寫字母。
    8. fromRoman 應該只接受大寫羅馬數字 (也就是說給定小寫字母進行轉換時應該失敗)。

    進一步閱讀

    • 這個站點 有關于羅馬數字更多的內容,包括羅馬人如何使用羅馬數字的迷人 歷史 (簡言之:充滿偶然性和反復無常)。
    97av