《零基础入门python》第18讲动动手2
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)
请问各位大佬这个代码从这里开始是什么意思呢?
for each1 in range(length-1):
本帖最后由 a690089735 于 2018-4-3 21:21 编辑
desStr = '0123456' => 假如desStr = '0123456'
length = len(desStr) => length = 7,因为desStr有7个成员
for each1 in range(length-1): => 左侧相当于range(7-1),然后each =0到6,用for迭代,每次都执行一次他下面的代码
if desStr == subStr: => 如果desStr中的第each个字符和subStr的第0个(首个,第一个)字符一样,那么向下判断
if desStr == subStr: => 这里each+1,就相当于是下一个字符了,如果这个字符和subStr的第1个(第二个)字符一样,向下行
count += 1 => 如果两个判断都通过了,就是subStr在desStr中出现了,那么计数加1
{:5_91:}
建议写成
if desStr == subStr:
count += 1
更容易理解 for each1 in range(length-1):
for循环头,each1指向0到查找字符串长度-2 range(7-1)应该是,不包含6的呀,那不是应该range(7)吗,为什么要减1 一生暖暖 发表于 2018-4-7 14:04
range(7-1)应该是,不包含6的呀,那不是应该range(7)吗,为什么要减1
因为for each1 in range(length-1): 中的each1取值范围是字符串的索引的范围,length是整个字符串的长度它是从1开始计数的,而索引是从0开始的,所以比整个字符串的长度小1。比如‘0123’,length=4,但是他的索引是0~3,所以each1的取值范围是range(length-1) 即 0~length-1 G.North 发表于 2022-3-17 17:18
因为for each1 in range(length-1): 中的each1取值范围是字符串的索引的范围,length是整个字符串的长度 ...
上面回复错了,不好意思 G.North 发表于 2022-3-17 17:23
上面回复错了,不好意思
因为each1 是subStr的第一个元素的索引,所以说each1的范围最多只能到desStr倒数第二个,也就是range(length-1)的这个范围,然后就经过if desStr == subStr:判断,判断each1和subStr:是不是一致的,一致就进入下一个判断if desStr == subStr: ,此时each+1,就代表着each1的下一位字符串,如果each1的取值范围是range(length)即全字符串的长度,那这里的each+1就会报错,因为当each1取到字符串的最后一个元素时,each+1就超过了索引范围了,所以each1的范围是range(length-1),即取不到最后一个字符串。
页:
[1]