递归计算字符串长度报错list index out of range,请帮忙修正代码
修正递归计算字符串长度的Python代码
嘿,我来帮你排查这个递归计算字符串长度的问题~
你的代码触发list index out of range错误,核心原因是把C语言的字符串逻辑套到Python里了:Python的字符串(转成列表后)根本没有C风格的'\0'终止符!当递归到最后一步,s[1:]会变成空列表,这时候你还去访问s[0],自然就会索引越界啦。
修正后的代码
def lengthh(s): # 终止条件:空列表直接返回0,避免索引访问错误 if not s: return 0 small_output = lengthh(s[1:]) return 1 + small_output strr = "abc" array = list(strr) print(lengthh(array))
关键修改点
- 终止条件替换:把判断
s[0]=='\0'改成if not s(判断列表是否为空),这才是Python里判断序列结束的正确方式。 - 移除冗余全局变量:你提前定义的
s=list()和smallOutput=int()都是全局变量,完全没必要,函数内部的变量可以自己声明使用。 - 符合Python规范:把变量名改成了
small_output(下划线分隔的蛇形命名法),同时给print加上括号(Python3里print是函数,必须加括号)。
运行修正后的代码,输入"abc"会输出3,完全符合预期~
内容的提问来源于stack exchange,提问作者Rohan Patil
相关产品推荐
相关产品推荐

