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

Leetcode罗马数字转整数Python代码报索引越界错因咨询

问题排查

你代码里有两个核心问题,第一个直接触发索引越界报错,第二个会导致计算结果不符合罗马数字规则:

  • 索引越界的直接原因:if判断的条件顺序错误。Python的and是左结合的短路运算符,会从左到右依次判断表达式,只要左侧为假就直接返回假,不会执行右侧逻辑。你当前的判断先执行roman_dict[s[i+1]]取值,当i遍历到字符串最后一个位置时,i+1等于字符串长度,已经超出有效索引范围(字符串索引从0开始,最大有效索引为len(s)-1),这时候还没等执行后面的i + 1 < len(s)边界检查,就已经抛出索引越界错误。
  • 计算逻辑错误:罗马数字的减法规则是「小值符号出现在大值符号左侧时,减去小值」,比如IV代表4、XL代表40,你写的判断条件是当前位值大于下一位值时做减法,和实际规则完全相反,就算修好索引问题,计算结果也是错的。
修正后代码
s = "CCXLVII"

roman_dict = {
    'C': 100,
    'L': 50,
    'X': 10,
    'V': 5,
    'I': 1
}

temp = 0
for i in range(len(s)):
    # 优先做边界校验,确认i+1合法后再比较相邻值,同时修正大小判断的方向
    if i + 1 < len(s) and roman_dict[s[i]] < roman_dict[s[i+1]]:
        temp -= roman_dict[s[i]]
    else:
        temp += roman_dict[s[i]]

print(temp)  # 输出247,与CCXLVII的实际数值一致

内容的提问来源于stack exchange,提问作者mybraincellssayhi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 20:39:18