You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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,符合预期

代码解释

  1. 调整循环终止条件:n <= len(s1)-3,因为当n等于len(s1)-3时,s1[n:n+3]刚好是最后一个3字符窗口,不会出现索引越界的情况。
  2. 正确截取滑动窗口:用s1[n:n+3]获取当前位置的3字符子串。
  3. 移除无效的内层while循环,改用if判断当前窗口是否等于'bob',匹配就计数加1。
  4. 每次循环后让n加1,实现窗口的滑动,彻底避免无限循环。

运行这段修正后的代码,就能得到你预期的结果2啦。

内容的提问来源于stack exchange,提问作者Quixote_82

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:43:44