如何用Python统计字符串中单词出现次数?代码陷无限循环求解答
你的代码问题分析与修复方案
先帮你捋捋这段代码里导致无限循环和结果错误的几个关键问题:
核心问题点
- 无限循环的根源:外层
while n<=len(s1)里完全没有让n递增的逻辑,n一直停在0,永远满足循环条件,自然会无限跑下去。 - 子串截取错误:你想取3字符滑动窗口的话,应该用
s1[n:n+3],而不是s1[n:3]——后者是从索引n截取到索引3(不包含),当n大于3时就会得到空串,完全不符合滑动窗口的需求。 - 变量初始化与判断逻辑混乱:
cmp_chars初始化成了整数0,后面却拿它和字符串子串比较,类型都不一样,永远不可能相等,内层的while cmp_chars == s1[n:3]循环根本不会执行,统计逻辑完全失效。 - 内层while循环误用:这里不需要嵌套while,滑动窗口只需要在外层循环里逐个移动窗口,用
if判断当前窗口是否匹配即可。
修正后的代码
def find_bob(s1): check_str = 'bob' count = 0 n = 0 # 窗口是3个字符,所以n最多到len(s1)-3,避免越界 while n <= len(s1) - 3: current_window = s1[n:n+3] if current_window == check_str: count += 1 # 每次循环让n加1,实现窗口滑动 n += 1 return count s1 = 'azcbobobegghakl' val1 = find_bob(s1) print(val1) # 输出2,符合预期
代码解释
- 调整循环终止条件:
n <= len(s1)-3,因为当n等于len(s1)-3时,s1[n:n+3]刚好是最后一个3字符窗口,不会出现索引越界的情况。 - 正确截取滑动窗口:用
s1[n:n+3]获取当前位置的3字符子串。 - 移除无效的内层while循环,改用
if判断当前窗口是否等于'bob',匹配就计数加1。 - 每次循环后让
n加1,实现窗口的滑动,彻底避免无限循环。
运行这段修正后的代码,就能得到你预期的结果2啦。
内容的提问来源于stack exchange,提问作者Quixote_82
相关产品推荐
相关产品推荐

