字符串中a与b间恰好3个字符的检测代码修复求助
字符串'a'与'b'间隔3字符检测的IndexError修复方案
问题根源
- 原代码循环遍历整个字符串索引,但当
i接近字符串末尾时,i+4会超出字符串的最大索引范围,直接触发IndexError。比如第三个测试字符串'look after baby',末尾附近的'a'对应的i加上4后,已经超出了字符串的长度。 - 代码最后一行的
return string完全是无效代码,永远不会被执行,因为前面已经有return False了。
修复后的代码
def hi_coder(string): # 限制循环范围,确保i+4不会越界 for i in range(len(string) - 4): if string[i] == 'a' and string[i+4] == 'b': return True return False print(hi_coder(input()))
修复细节
- 循环范围改为
range(len(string)-4):因为字符串索引从0开始,要让i+4不超过最后一个有效索引len(string)-1,i的最大值只能是len(string)-5,而range(len(string)-4)刚好生成0到len(string)-5的所有整数(利用range左闭右开的特性)。 - 如果字符串长度小于5,
len(string)-4会是负数,此时range()生成空序列,循环直接跳过,函数返回False,这符合逻辑——长度不足5的字符串不可能存在间隔3个字符的'a'和'b'。 - 删掉了没用的
return string语句。
内容的提问来源于stack exchange,提问作者Abror Karimov
相关产品推荐
相关产品推荐

