Python中不使用默认函数统计子串出现次数,代码无输出求解决
问题排查与解决
原代码存在的问题
- 变量名
len覆盖了Python内置的len()函数,属于不良编程习惯,可能引发后续逻辑错误。 - 核心逻辑错误:第一个while循环内的
for i in s1[0+n::]是遍历字符串的单个字符,此时i为单个字符,ss in i只有当子串长度为1时才可能成立,大部分场景下永远为False,导致count无法累加。 - 多余的反转字符串处理:反转原字符串再统计属于无效操作,会重复统计甚至错误计算子串出现次数,完全没必要。
- 循环逻辑混乱:while与for循环的嵌套方式错误,无法正确遍历所有可能的子串起始位置。
修正后的代码(手动实现子串统计,不使用内置统计函数)
s1 = input("Enter the String: ") ss = input("Enter the Substring: ") count = 0 # 分别获取原字符串和子串长度,避免覆盖内置函数 str_len = len(s1) sub_len = len(ss) # 子串长度大于原字符串时直接返回0 if sub_len > str_len: print(count) else: # 遍历所有合法的子串起始位置 for start_idx in range(str_len - sub_len + 1): match_flag = True # 逐个字符对比子串 for i in range(sub_len): if s1[start_idx + i] != ss[i]: match_flag = False break if match_flag: count += 1 print(count)
代码逻辑说明
- 先判断子串长度是否大于原字符串,若成立直接输出0,因为不可能存在匹配。
- 遍历所有合法的子串起始索引:起始索引的最大值为
str_len - sub_len,从该索引开始刚好能截取到长度为sub_len的子串。 - 对每个起始索引,逐个字符对比原字符串的对应片段与目标子串,完全匹配则计数加1。
内容的提问来源于stack exchange,提问作者David Luke
相关产品推荐
相关产品推荐

