第 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 应该只接受大写罗马数字 (也就是说给定小写字母进行转换时应该失败)。

进一步阅读

  • 这个站点 有关于罗马数字更多的内容,包括罗马人如何使用罗马数字的迷人 历史 (简言之:充满偶然性和反复无常)。
时时彩倍投计算公式 时时彩后二稳定方法 时时彩稳赢技巧 时时彩软件官方 红太阳时时彩
时时彩计划彩票3593515交流群 北京5分时时彩开奖号码 重庆时时彩合式图表 时时彩平台刷钱教程 内蒙古十一选五下载
时时彩后三直选式技巧 内蒙古时时彩在线机选 江西时时彩走势图遗漏 时时彩后三百分百胆码 时时彩平台总代理
银联第三方支付平台 内蒙古时时彩专家杀号 时时彩手机软件分析 江西时时彩任一二三 时时彩过滤工具
txt全本电子书下载 体彩11选5投注 安徽快3开奖视频◆安徽快3最快开奖结果查询◆安徽快3形态走势图◆安徽快3今日幸运号 湖北30选5开奖一彩票控 浙江11选5
宁夏11选5基本走势图 多乐彩出号走势 三公游戏单机版 北京pk10定位胆 北京十一选五开奖直播
广东福彩快乐十分 上海快3遗漏数据豹子1 天天彩选4 上海时时乐走势图 曾道人资料
江西快三走势图怎么看 河北福彩排列7开奖 吉林时时彩玩法介绍 广东11选5爱彩乐 河北快3开奖走势图