Max448 发表于 2018-3-19 19:47:58

《零基础入门python》中习题的疑问

小甲鱼在18讲的作业中写了一个函数来求目标字符串中的子字符串出现的次数,但是只能求两个字符,我想把它拓展成任何长度的,但是挣扎到这里后,不知道该怎么办,运行时会出现
line 13, in findstr
    if desStr == subStr:
IndexError: string index out of range
这样的错误提示


下面是源代码
def findstr(desStr,subStr):
    '这个函数用来查找子字符串在字符串中出现的次数。'
    count = 0
    length1 = len(desStr)
    length2 = len(subStr)
    length3 = 0
    if subStr not in desStr:
      print('在目标字符串中未找到字符串')
    else:   
      for each1 in range(length1 - 1):
            if desStr == subStr:
                while length3 < length2:
                  if desStr == subStr:
                        length3 += 1
                        count += 1
                  else:
                        break
      print("子字符串在目标字符中共出现",count/length2,"次")
    return count

desStr = input("请输入目标字符串:")
subStr = input("请输入子字符串:")
findstr(desStr,subStr)

求各位大神赐教

瘫痪的废柴 发表于 2018-3-21 11:12:30

感觉你这个查找的算法有问题:
0).通过算出重复的字符有多少个然后除以subStr长度,但是在计算重复字符数时有重复计算,老师代码里有了两个if嵌套,保证两个字符都相同才+1的;
1).报错时溢出字符长度,老师代码+1是比较接下来的字符,应该等价于这里的length3,并且在跳出while时length3没有初始化为0;
2).然后range()函数里应该是range(length1 - length2)
也是刚学python,这是个人的一点看法,希望能够交流下
页: [1]
查看完整版本: 《零基础入门python》中习题的疑问