鱼C论坛

 找回密码
 立即注册
查看: 2726|回复: 1

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

[复制链接]
发表于 2018-3-19 19:47:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
小甲鱼在18讲的作业中写了一个函数来求目标字符串中的子字符串出现的次数,但是只能求两个字符,我想把它拓展成任何长度的,但是挣扎到这里后,不知道该怎么办,运行时会出现
line 13, in findstr
    if desStr[each1+length3+1] == subStr[length3+1]:
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[each1+length3] == subStr[length3]:
                while length3 < length2:
                    if desStr[each1+length3+1] == subStr[length3+1]:
                        length3 += 1
                        count += 1
                    else:
                        break
        print("子字符串在目标字符中共出现",count/length2,"次")
    return count

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

求各位大神赐教
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-3-21 11:12:30 | 显示全部楼层
感觉你这个查找的算法有问题:
0).通过算出重复的字符有多少个然后除以subStr长度,但是在计算重复字符数时有重复计算,老师代码里有了两个if嵌套,保证两个字符都相同才+1的;
1).报错时溢出字符长度,老师代码+1是比较接下来的字符,应该等价于这里的length3,并且在跳出while时length3没有初始化为0;
2).然后range()函数里应该是range(length1 - length2)
也是刚学python,这是个人的一点看法,希望能够交流下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-25 22:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表