Python实现整数转罗马数字代码运行错误原因排查
整数转罗马数字代码问题解答
问题根因
- 核心问题是你依赖了Python字典的遍历顺序:在Python 3.7版本之前,普通
dict不会保留元素的插入顺序,调用reversed(dict.items())时的遍历顺序是不可预测的,不会按照你预期的「数值从大到小」的顺序匹配罗马字符,因此匹配9的时候没有先命中IX,反而先匹配到了小数值的IV、I等字符,最终得到错误结果。 - 额外隐患:你使用了Python内置关键字
dict作为变量名,会覆盖内置的字典类型,后续如果需要调用dict()创建字典时会出现异常。 - 就算你使用的是Python 3.7及以上版本(默认保留字典插入顺序),你的逻辑仍存在风险:一旦后续修改字典新增元素时调整了插入顺序,就会直接导致转换逻辑出错。
修复方案
不要依赖字典的顺序,直接显式定义按数值降序排列的罗马字符映射列表,保证遍历顺序永远符合预期,修正后的代码如下:
class Solution(object): def intToRoman(self, num): """ :type num: int :rtype: str """ # 显式按数值从大到小定义映射,不受版本影响 roman_map = [ ("M", 1000), ("CM", 900), ("D", 500), ("CD", 400), ("C", 100), ("XC", 90), ("L", 50), ("XL", 40), ("X", 10), ("IX", 9), ("V", 5), ("IV", 4), ("I", 1) ] returnee = "" for k, v in roman_map: while num >= v: returnee += k num -= v return returnee
验证结果
修正后所有测试用例均可正常输出正确结果:
- 3 → III
- 4 → IV
- 27 → XXVII
- 319 → CCCXIX
- 9 → IX
内容的提问来源于stack exchange,提问作者Abs.hek
相关产品推荐
相关产品推荐

