cRicardo 发表于 2020-4-28 23:38:31

寻找字符串的改进

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:
            z=z+every
      if z==t:
            count+=1
    print('字符串在目标字符串中共出现%d次'%count)
s=input('请输入目标字符串:')
t=input('请输入子字符串:')
findstr(s,t)

773254968 发表于 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:
            z=z+every
      if z==t:
            count +=1
            index +=la
      else:
            index +=1
      
    print('字符串在目标字符串中共出现%d次'%count)

BngThea 发表于 2020-4-29 08:36:27

第7行,改成each:each+la+1

sunrise085 发表于 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:
            z=z+every
      if z==t:
            count+=1
    print('字符串在目标字符串中共出现%d次'%count)
s=input('请输入目标字符串:')
t=input('请输入子字符串:')
findstr(s,t)

cRicardo 发表于 2020-4-29 10:59:49

BngThea 发表于 2020-4-29 08:36
第7行,改成each:each+la+1

谢谢啦,已经解决了

cRicardo 发表于 2020-4-29 11:00:25

sunrise085 发表于 2020-4-29 09:20
两处错误,
第三行不应该减一
for循环内,每次循环时z应该清空

谢谢啦,已经解决了

cRicardo 发表于 2020-4-29 11:01:03

773254968 发表于 2020-4-29 10:51


哇这个太棒了,试了很多都是对的,谢谢大佬

sunrise085 发表于 2020-4-29 11:07:54

cRicardo 发表于 2020-4-29 11:01
哇这个太棒了,试了很多都是对的,谢谢大佬

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

若满意请给个最佳。谢谢~
页: [1]
查看完整版本: 寻找字符串的改进