Python统计字符串中'bob'出现次数的代码逻辑错误排查
问题排查与修复
你的代码出现计数虚高的问题,核心原因是循环次数超出实际需要,导致同一组字符被重复统计,咱们一步步拆解:
问题根源
你用for var in s来循环,这会让循环执行len(s)次——但统计连续三个字符的序列,实际只需要检查len(s)-2组(比如长度为5的字符串,只有0-2、1-3、2-4这3组,也就是5-2=3次循环)。
当代码运行到c等于len(s)-1(最后一个字符的索引)时,c < len(s)-1的判断不成立,a、b、c就不再往后移动。但循环还会继续执行剩下的次数,每次都会重复检查最后一组三个字符:如果这组刚好是bob,就会每次给count加1,直接导致统计结果虚高。
比如你提到的nqsbobobdbtobob,最后三个字符就是bob,代码在c到达最后位置后,还会多循环2次,这两次都会重复统计最后一组bob,所以结果比实际多了2次,和你遇到的情况完全吻合。
修复方案
直接按需要的组数来循环,遍历每个可能的起始索引即可,既简洁又不会出错:
s = input('Enter String') count = 0 # 只遍历到倒数第三个字符的索引,避免越界和重复统计 for i in range(len(s) - 2): if s[i] == 'b' and s[i+1] == 'o' and s[i+2] == 'b': count += 1 print(count)
可选优化(更Pythonic)
如果想让代码可读性更高,可以用字符串切片简化判断逻辑:
s = input('Enter String') count = 0 for i in range(len(s) - 2): if s[i:i+3] == 'bob': count += 1 print(count)
内容的提问来源于stack exchange,提问作者RS404
相关产品推荐
相关产品推荐

