求助:如何解决Python代码中的List index out of range问题?
解决列表索引越界问题及罗马数字转换逻辑修正
你的代码出现List index out of range的原因是变量j在循环中没有更新,导致while循环的条件一直成立,i不断递增直到超出arr的索引范围。同时代码还存在罗马数字转换逻辑的漏洞,最后一个元素没有被计入结果。
问题分析
- 索引越界根源:
j初始设为i+1,但后续循环中只递增i,j始终保持初始值。比如处理'VIII'时,arr长度为4,j一直是1,while j < 4永远成立,i会一直增加到4,此时arr[i]访问arr[4]就会越界(数组索引最大为3)。 - 逻辑漏洞:当前代码只处理了前n-1个元素的比较,最后一个元素没有被加入结果中。
修正后的代码
list1 = { 'I' : 1, 'V' : 5, 'X' : 10, 'L' : 50, 'C' : 100, 'D' : 500, 'M' : 1000 } def func(x): arr = [] res = 0 # 将罗马字符转换为对应数值 for z in x: arr.append(list1[z]) # 遍历到倒数第二个元素,避免j越界 for i in range(len(arr) - 1): j = i + 1 if arr[i] >= arr[j]: res += arr[i] else: res -= arr[i] # 加上最后一个元素 res += arr[-1] return res print(func('VIII')) # 输出8 print(func('IX')) # 输出9,验证减法逻辑
关键修正点
- 改用
for循环遍历到len(arr)-1,确保j=i+1不会超出数组范围。 - 循环结束后加上最后一个元素,因为最后一个元素没有后续元素,直接加到结果中。
- 简化减法逻辑:
res += arr[i]*-1等价于res -= arr[i],更易读。
内容的提问来源于stack exchange,提问作者Kaushik Developer
相关产品推荐
相关产品推荐

