鱼C论坛

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

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

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

  4. 能理解的话,整个代码这样会更严谨一些:
  5. def findstr(s1,t):
  6.     la=len(t)
  7.     le=len(s1)-1
  8.    
  9.     count=0
  10.     index = 0
  11.     while index <= le-la :
  12.         z=''
  13.         for every in s1[index:index+la]:
  14.             z=z+every
  15.         if z==t:
  16.             count +=1
  17.             index +=la
  18.         else:
  19.             index +=1
  20.         
  21.     print('字符串在目标字符串中共出现%d次'%count)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

  4. 能理解的话,整个代码这样会更严谨一些:
  5. def findstr(s1,t):
  6.     la=len(t)
  7.     le=len(s1)-1
  8.    
  9.     count=0
  10.     index = 0
  11.     while index <= le-la :
  12.         z=''
  13.         for every in s1[index:index+la]:
  14.             z=z+every
  15.         if z==t:
  16.             count +=1
  17.             index +=la
  18.         else:
  19.             index +=1
  20.         
  21.     print('字符串在目标字符串中共出现%d次'%count)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-4-29 08:36:27 | 显示全部楼层
第7行,改成each:each+la+1
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

两处错误,
第三行不应该减一
for循环内,每次循环时z应该清空

  1. def findstr(s,t):
  2.     la=len(t)
  3.     le=len(s)
  4.     count=0
  5.     for each in range(0,le-la):
  6.         z=''
  7.         for every in s[each:each+la]:
  8.             z=z+every
  9.         if z==t:
  10.             count+=1
  11.     print('字符串在目标字符串中共出现%d次'%count)
  12. s=input('请输入目标字符串:')
  13. t=input('请输入子字符串:')
  14. findstr(s,t)
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

谢谢啦,已经解决了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

谢谢啦,已经解决了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

哇这个太棒了,试了很多都是对的,谢谢大佬
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

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

若满意请给个最佳。谢谢~
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-30 12:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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