永远的渣滓 发表于 2020-4-5 16:09:46

length-1

def findStr(desStr, subStr):
    count = 0
    length = len(desStr)
    if subStr not in desStr:
      print('在目标字符串中未找到字符串!')
    else:
      for each1 in range(length-1):                                             这里为什么要减1
            if desStr == subStr:
                if desStr == subStr:
                  count += 1
                  
      print('子字符串在目标字符串中共出现 %d 次' % count)

desStr = input('请输入目标字符串:')
subStr = input('请输入子字符串(两个字符):')
findStr(desStr, subStr)

墨羽岚 发表于 2020-4-5 16:20:46

本帖最后由 墨羽岚 于 2020-4-5 16:21 编辑

wbzd但是我去掉了那个-1也能正常运行
请输入目标字符串:213343134
请输入子字符串(两个字符):34
子字符串在目标字符串中共出现 2 次
请输入目标字符串:ioioiouuu
请输入子字符串(两个字符):oi
子字符串在目标字符串中共出现 2 次

qiuyouzhi 发表于 2020-4-5 16:47:36

因为len是以1往后的,而索引是以0开头
所以要减一

zltzlt 发表于 2020-4-5 17:18:26

如果不减 1 就会出错,因为访问了 desStr+1]

永远的渣滓 发表于 2020-4-5 17:35:35

qiuyouzhi 发表于 2020-4-5 16:47
因为len是以1往后的,而索引是以0开头
所以要减一

理解了{:5_109:}

txxcat 发表于 2020-4-6 14:03:58

本帖最后由 txxcat 于 2020-4-6 14:14 编辑

永远的渣滓 发表于 2020-4-5 17:35
理解了

你确信理解了?你选的答案是错误的,zltzlt的答案是对的!之所以要lenth-1是因为题目要判断2个字符,所以找第一个字符只用遍历到倒数第二个字符,如果不减1,遍历到最后一个字符,下面的代码each1+1就会真正出现“out of range”。
运行这段代码来理解一下range():
a='123456789'
for i in range(lenth(a)):
    print(i,a)

永远的渣滓 发表于 2020-4-6 14:09:02

txxcat 发表于 2020-4-6 14:03
你确信理解了?你选的答案是错误的,zltzlt的答案是对的!之所以要lenth-1是因为题目要判断2个字符,所以 ...

好像有道理,如果遍历最后一个就会超出范围了,是吗?{:10_272:}

txxcat 发表于 2020-4-6 14:17:53

永远的渣滓 发表于 2020-4-6 14:09
好像有道理,如果遍历最后一个就会超出范围了,是吗?

不是的,上面的代码错了点,现在修正了,其中a有9个字符,
for i in rang(9),i的范围是0-8,不包含9,所以不会有超出范围的问题。

永远的渣滓 发表于 2020-4-6 14:41:45

txxcat 发表于 2020-4-6 14:17
不是的,上面的代码错了点,现在修正了,其中a有9个字符,
for i in rang(9),i的范围是0-8,不包含9, ...

哦哦
页: [1]
查看完整版本: length-1