鱼C论坛

 找回密码
 立即注册
查看: 1930|回复: 7

[已解决]寻找字符串的改进

[复制链接]
发表于 2020-4-28 23:38:31 | 显示全部楼层 |阅读模式
1鱼币
python课后练习,第18讲,动动手的第二题要求是输入长度为2的子字符串查找,我想把它改成无论输入的子字符串长度为多少都可以查找,但无论输入什么count都等于0,新手入门很多还不太懂,求大佬解答
def findstr(s,t):
    la=len(t)
    le=len(s)-l
    z=''
    count=0
    for each in range(0,le-la):
        for every in s[each:each+la]:
            z=z+every
        if z==t:
            count+=1
    print('字符串在目标字符串中共出现%d次'%count)
s=input('请输入目标字符串:')
t=input('请输入子字符串:')
findstr(s,t)
最佳答案
2020-4-28 23:38:32
le=len(s1)-l
NameError: name 'l' is not defined
这是你报错的根源。是1并不是L。

能理解的话,整个代码这样会更严谨一些:
def findstr(s1,t):
    la=len(t)
    le=len(s1)-1
    
    count=0
    index = 0
    while index <= le-la : 
        z=''
        for every in s1[index:index+la]:
            z=z+every
        if z==t:
            count +=1
            index +=la
        else:
            index +=1
        
    print('字符串在目标字符串中共出现%d次'%count)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-28 23:38:32 | 显示全部楼层    本楼为最佳答案   
le=len(s1)-l
NameError: name 'l' is not defined
这是你报错的根源。是1并不是L。

能理解的话,整个代码这样会更严谨一些:
def findstr(s1,t):
    la=len(t)
    le=len(s1)-1
    
    count=0
    index = 0
    while index <= le-la : 
        z=''
        for every in s1[index:index+la]:
            z=z+every
        if z==t:
            count +=1
            index +=la
        else:
            index +=1
        
    print('字符串在目标字符串中共出现%d次'%count)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-29 08:36:27 | 显示全部楼层
第7行,改成each:each+la+1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-29 09:20:25 | 显示全部楼层
本帖最后由 sunrise085 于 2020-4-29 09:21 编辑

两处错误,
第三行不应该减一
for循环内,每次循环时z应该清空
def findstr(s,t):
    la=len(t)
    le=len(s)
    count=0
    for each in range(0,le-la):
        z=''
        for every in s[each:each+la]:
            z=z+every
        if z==t:
            count+=1
    print('字符串在目标字符串中共出现%d次'%count)
s=input('请输入目标字符串:')
t=input('请输入子字符串:')
findstr(s,t)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-4-29 10:59:49 | 显示全部楼层
BngThea 发表于 2020-4-29 08:36
第7行,改成each:each+la+1

谢谢啦,已经解决了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-4-29 11:00:25 | 显示全部楼层
sunrise085 发表于 2020-4-29 09:20
两处错误,
第三行不应该减一
for循环内,每次循环时z应该清空

谢谢啦,已经解决了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-4-29 11:01:03 | 显示全部楼层

哇这个太棒了,试了很多都是对的,谢谢大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-29 11:07:54 | 显示全部楼层
cRicardo 发表于 2020-4-29 11:01
哇这个太棒了,试了很多都是对的,谢谢大佬

四楼程序是有问题的
若s字符串是abcabababc,t字符串是abab,结果应该是几次?1次还是两次?
他的程序没考虑子串自身有重复的问题

若满意请给个最佳。谢谢~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-11 19:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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