为什么要 for each1 in range(length-1):
2. 编写一个函数 findstr(),该函数统计一个长度为 2 的子字符串在另一个字符串中出现的次数。例如:假定输入的字符串为“You cannot improve your past, but you can improve your future. Once time is wasted, life is wasted.”,子字符串为“im”,函数执行后打印“子字母串在目标字符串中共出现 3 次”。def findStr(desStr, subStr):
count = 0
length = len(desStr)
if subStr not in desStr:
print('在目标字符串中未找到字符串!')
else:
for each1 in range(length-1):
if desStr == subStr:
if desStr == subStr:
count += 1
print('子字符串在目标字符串中共出现 %d 次' % count)
desStr = input('请输入目标字符串:')
subStr = input('请输入子字符串(两个字符):')
findStr(desStr, subStr) 因为你找的是长度2的字符串,所以lengtha减了1,
错了
本帖最后由 jhr622250 于 2018-9-19 17:51 编辑你字符串一共5个的话,,range是从 0 开始的,0到4才是5个数字 jhr622250 发表于 2018-9-19 10:44
你字符串一共5个的话,,range是从 0 开始的,0到4才是5个数字
0到4不就是for i in range(5)吗 塔利班 发表于 2018-9-18 20:35
因为你找的是长度2的字符串,所以lengtha减了1,
老哥能说的更加详细一点吗,谢谢啦 字符串这里是用索引查找的,例如a='abc'长度是3,索引是从0开始,
单个字母索引最大就是a而不是a
而这里的逻辑是第一个字母和带查找的双字母字符串的首字母对上了,再看下一个字母和剩余的是否对上
for each1 in range(length-1):
if desStr == subStr:
if desStr == subStr:
count += 1
因为第二个字母desStr能取到最大索引,这里desStr是判断的双字母字符串首字母,能取到的索引又减了1 明显就是如果不减1要超出数组范围了。。。当最后一个字母出现的时候,后面是没有字母的,所以比较没有意义。 学习一下,顶 {:10_249:} 本帖最后由 zeusmip 于 2020-4-21 16:52 编辑
这样解释,因为你搜的是2个字符,所以不需要考虑整句中最后一个字符是否匹配,可以少循环一次。 比如你要在"Love"中搜"ve",那最后一轮"Love"中的“e”没必要在和"ve"对比一次,反正后面也没有字符了,所以搜索对比前三轮就够了。比较严谨的写法,结果应该是一样,如果会出什么其他Bug,请补充。 塔利班 发表于 2018-9-19 11:35
字符串这里是用索引查找的,例如a='abc'长度是3,索引是从0开始,
单个字母索引最大就是a而不是a
...
流批 看懂了谢谢大佬
请问一下为什么是each1而不是each? 同问为啥是each1 塔利班 发表于 2018-9-19 11:35
字符串这里是用索引查找的,例如a='abc'长度是3,索引是从0开始,
单个字母索引最大就是a而不是a
...
牛逼,懂了
页:
[1]