鱼C论坛

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

[已解决]零基础学习Python018那节课统计字符串频率的课后题相关问题

[复制链接]
发表于 2019-11-16 19:52:18 | 显示全部楼层 |阅读模式

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

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

x
亲爱滴鱼油们:
大家好吖!肉包子关于课后题有一个问题想不明白,小甲鱼的代码我能看懂,但是我自己的代码错在哪里我是怎么也想不通,还想麻烦大家帮忙看看是哪里出了问题呢?
新手入门,大概问题会比较低级,还请 多多包涵啦~

题目是要求返回子字符串在目标字符串里出现的次数:
这是肉包子我的代码啦:

        obj=input('请输入目标字符串:')
        aim=input('请输入子字符串(两个字符):')
        count=0

        for aim in obj:
            count+=1
        print('子字符串在目标字符串中共出现',count,'次')

   
但是这样返回的是一个奇奇怪怪怎么都想不明白的数字……
返回的效果是这样的:
       
        请输入目标字符串:我爱吃包子,肉包子,菜包子。
        请输入子字符串(两个字符):包子
        子字符串在目标字符串中共出现 14 次


讲道理我是真的想不明白这个14是怎么来的吖!
谢谢大家的帮助了ouo感恩!
最佳答案
2019-11-16 20:07:43
本帖最后由 jackz007 于 2019-11-16 21:39 编辑

    14 是字符串 obj 的总长度,因为 for aim in obj 这个语句将会按单个字符,而不是按楼主所预期的 2 个字符那样来枚举 obj。

    应该这么修改:
obj = input('请输入目标字符串:') . strip()              # 获取键盘输入,用 strip() 去掉字符串首尾的空白字符
aim = input('请输入子字符串(两个字符):') . strip()       # 获取键盘输入,用 strip() 去掉字符串首尾的空白字符
count , i = 0 , 0                                      # 目标计数 count 和循环变量 i 赋初值 0
while i < len(obj) - len(aim) + 1 :                    # 从下标 0 开始,在字符串 obj 中循环查找 aim
    if obj[i : i + len(aim)] == aim:                   # 如果字符串切片 obj[i : i + len(aim)] 与 aim 相等
        count += 1                                     # 目标计数加 1
        i = i + len(aim)                               # 循环变量 i 步进 len(aim) 个字符
    else:                                              # 否则,如果二者不相等
        i += 1                                         # 循环变量步进 1 个字符
print('子字符串在目标字符串中共出现' , count , '次')       # 显示最终的寻找结果

    当然,最简洁的代码是这样:
obj = input('请输入目标字符串:') . strip()
aim = input('请输入子字符串(两个字符):') . strip()
print('子字符串在目标字符串中共出现' , obj . count(aim) , '次')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-11-16 20:07:43 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2019-11-16 21:39 编辑

    14 是字符串 obj 的总长度,因为 for aim in obj 这个语句将会按单个字符,而不是按楼主所预期的 2 个字符那样来枚举 obj。

    应该这么修改:
obj = input('请输入目标字符串:') . strip()              # 获取键盘输入,用 strip() 去掉字符串首尾的空白字符
aim = input('请输入子字符串(两个字符):') . strip()       # 获取键盘输入,用 strip() 去掉字符串首尾的空白字符
count , i = 0 , 0                                      # 目标计数 count 和循环变量 i 赋初值 0
while i < len(obj) - len(aim) + 1 :                    # 从下标 0 开始,在字符串 obj 中循环查找 aim
    if obj[i : i + len(aim)] == aim:                   # 如果字符串切片 obj[i : i + len(aim)] 与 aim 相等
        count += 1                                     # 目标计数加 1
        i = i + len(aim)                               # 循环变量 i 步进 len(aim) 个字符
    else:                                              # 否则,如果二者不相等
        i += 1                                         # 循环变量步进 1 个字符
print('子字符串在目标字符串中共出现' , count , '次')       # 显示最终的寻找结果

    当然,最简洁的代码是这样:
obj = input('请输入目标字符串:') . strip()
aim = input('请输入子字符串(两个字符):') . strip()
print('子字符串在目标字符串中共出现' , obj . count(aim) , '次')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

发表于 2019-11-16 20:19:39 | 显示全部楼层
你这是迭代 obj,因为 obj 的长度是 14,而每次迭代 count 加 1,所以 count 为 14。你应该这样改:
obj = input('请输入目标字符串:')
aim = input('请输入子字符串(两个字符):')
count = obj.count(aim)
print('子字符串在目标字符串中共出现',count,'次')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2019-11-16 20:48:48 | 显示全部楼层
zltzlt 发表于 2019-11-16 20:19
你这是迭代 obj,因为 obj 的长度是 14,而每次迭代 count 加 1,所以 count 为 14。你应该这样改:

我懂惹!谢谢您!!~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-16 20:49:20 | 显示全部楼层
jackz007 发表于 2019-11-16 20:07
14 是字符串 obj 的总长度,因为 for aim in obj 这个语句将会按单个字符,而不是按楼主所预期的 2 个 ...

你字多讲得还有道理!听你的!谢谢~好细心嗷!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-16 20:58:54 | 显示全部楼层
jackz007 发表于 2019-11-16 20:07
14 是字符串 obj 的总长度,因为 for aim in obj 这个语句将会按单个字符,而不是按楼主所预期的 2 个 ...

嗷好心人我刚test了一下你帮我修改后的代码怎么都返回是0来着QAQ
另外如果您愿意的话可不可以用#号帮我写个注释呢~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-16 21:42:59 | 显示全部楼层
本帖最后由 jackz007 于 2019-11-16 21:45 编辑
一只鸡腿肉包子 发表于 2019-11-16 20:58
嗷好心人我刚test了一下你帮我修改后的代码怎么都返回是0来着QAQ
另外如果您愿意的话可不可以用#号帮我 ...


      不好意思,那份代码有个小问题,每次枚举的字符串切片的长度与 aim 不相等,所以造成最终找到次数是 0 的结果。代码已经修正,并按楼主要求,全文添加了详细注释。

      说明一下,这个代码并不限于查找 2 个字符,长度可以不限。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-17 15:52:20 | 显示全部楼层
jackz007 发表于 2019-11-16 21:42
不好意思,那份代码有个小问题,每次枚举的字符串切片的长度与 aim 不相等,所以造成最终找到次 ...

天哪噜真的太感谢了!!谢谢你的帮助和耐心!!对于一个Python入门的小菜鸡来说真的帮助太大啦!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 20:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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