You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 04:36:03