为何出现IndexError: string index out of range?附数字比较得分代码
错误原因及修正方案
核心错误原因(索引越界)
你的字符串长度为length,合法索引范围是0到length-1,但代码里设置maxs = length + 1,循环会执行length+1次。当n递增到length-1时,n+1等于length,超出了字符串的最大索引,直接触发IndexError: string index out of range。
另外,实际需要比较的相邻数字对数量是length-1(比如4个数字只需要比3次),你的循环次数完全错误。
其他问题
- 逻辑颠倒:题目要求「当前数字小于前一位则得分加1」,但代码里
if list[n+1]<list[n]时不加分,反而else分支加分,完全和需求相反。 - 变量命名冲突:用Python内置类型
list当变量名,会覆盖内置的list()函数,后续如果用到列表操作会出问题。 - 缩进错误:
if分支里的n = n +1和test = test +1缩进不正确,属于语法错误。
修正后的代码
# 改用有意义的变量名,避免覆盖内置类型 num_str = input('Enter your list(number only) : ') def scorefunction(initial_score): length = len(num_str) # 相邻数字对的数量是长度减1 compare_count = length - 1 score_final = initial_score n = 0 while n < compare_count: # 当前数字小于前一位,得分加1 if num_str[n+1] < num_str[n]: score_final += 1 n += 1 return score_final print(scorefunction(0))
测试示例:输入5823时,比较8>5(不加分)、2<8(加1)、3>2(不加分),最终得分1,符合你给出的示例结果。
内容的提问来源于stack exchange,提问作者sokunn S
相关产品推荐
相关产品推荐

