鱼C论坛

 找回密码
 立即注册
查看: 712|回复: 4

[已解决]python018讲课后作业 动动手的第二题编程题求助。

[复制链接]
发表于 2018-8-12 16:42:51 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 py540105162 于 2018-8-12 17:11 编辑

习题地址:https://fishc.com.cn/thread-42532-1-1.html

题目如下:
2. 编写一个函数 findstr(),该函数统计一个长度为 2 的子字符串在另一个字符串中出现的次数。
例如:假定输入的字符串为“You cannot improve your past,
but you can improve your future. Once time is wasted, life is wasted.”,
子字符串为“im”,函数执行后打印“子字母串在目标字符串中共出现 3 次”。

我的代码如下:
  1. def findstr(str1, str2):
  2.    
  3.     str1_len = len(str1)
  4.     count = 0
  5.     i = 0
  6.     while i < str1_len and i+1 < str1_len:
  7.         if str2[0] == str1[i]  and str2[1] == str1[i+1]:
  8.             count += 1
  9.             i += 2

  10.     print("子字符串在目标字符串中出现%d次" % count)


  11. str1 = input("请输入目标字符串:")
  12. str2 = input("请输入子字符串(两个字符):")
  13. findstr(str1, str2)
复制代码


看上去我的代码没什么问题,但是在完成子字符串输入后,感觉shell就停滞了,没有反应。请问是什么原因导致的?
最佳答案
2018-8-12 17:28:21
  1. def findstr(str1, str2):
  2.     str1_len = len(str1)
  3.     count = 0
  4.     i = 0
  5.     while i < str1_len and i+1 < str1_len:
  6.         if str2[0] == str1[i]  and str2[1] == str1[i+1]:
  7.             count += 1
  8.         i += 1
  9.     print("子字符串在目标字符串中出现%d次" % count)


  10. str1 = input("请输入目标字符串:")
  11. str2 = input("请输入子字符串(两个字符):")
  12. findstr(str1, str2)
复制代码

i+=2有两个bug
改成i+=1  为什么要一个一个的移动呢,假如aabcab这里面搜ab 自己想一想
然后就是i+=1多tab了一下 不管count是否加,你都要往后面搜索
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-8-12 16:55:41 | 显示全部楼层
不知道是你代码贴上来贴错了还是怎么回事:
if str2[0]==str1 and str2[0]==str1[i+1]
是不是第一个str1少了下标。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-12 17:12:05 | 显示全部楼层
lvvly 发表于 2018-8-12 16:55
不知道是你代码贴上来贴错了还是怎么回事:
if str2[0]==str1 and str2[0]==str1
是不是第一个str1少了下 ...

可能是我贴错了版本,已修改了。仍然无法正确输出次数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-12 17:28:21 | 显示全部楼层    本楼为最佳答案   
  1. def findstr(str1, str2):
  2.     str1_len = len(str1)
  3.     count = 0
  4.     i = 0
  5.     while i < str1_len and i+1 < str1_len:
  6.         if str2[0] == str1[i]  and str2[1] == str1[i+1]:
  7.             count += 1
  8.         i += 1
  9.     print("子字符串在目标字符串中出现%d次" % count)


  10. str1 = input("请输入目标字符串:")
  11. str2 = input("请输入子字符串(两个字符):")
  12. findstr(str1, str2)
复制代码

i+=2有两个bug
改成i+=1  为什么要一个一个的移动呢,假如aabcab这里面搜ab 自己想一想
然后就是i+=1多tab了一下 不管count是否加,你都要往后面搜索
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-12 20:47:57 | 显示全部楼层
lvvly 发表于 2018-8-12 17:28
i+=2有两个bug
改成i+=1  为什么要一个一个的移动呢,假如aabcab这里面搜ab 自己想一想
然后就是i+=1多 ...

谢谢,明白了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 01:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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