本帖最后由 jackz007 于 2019-3-22 18:23 编辑
没错,用 for 循环枚举字符串 decStr 中的每个字符确实应该用 range(length), 而之所以使用 length - 1 是因为在循环里要用到双字符比较,也就是 if decStr[each] == subStr[0]: 和 if decStr[each+1] == subStr[1]: 这两句,如果使用 range(length),那么,当 each = length - 1 的时候,each + 1 = length,而 decStr[length] 必然会越界的,这就是 for 循环使用 range(length - 1) 的原因。
- if decStr[each] == subStr[0]:
- if decStr[each+1] == subStr[1]:
复制代码
上面两句如果这样写可能要容易理解一些:
- if decStr[each] == subStr[0] and decStr[each + 1] == subStr[1]:
复制代码
意思是,在逐字符遍历字符串 decStr 的过程中,如果从索引 each 开始的连续 2 个字符都与 subStr 相同,则可以判定为找到了子串。
这条语句:
- print('字字符串一共出现过' + count + '次' )
复制代码
改成这样就没有问题了:
- print('字字符串一共出现过' + str(count) + '次' )
复制代码