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
相关产品推荐
相关产品推荐

