一只鸡腿肉包子 发表于 2019-11-16 19:52:18

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

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

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

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

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

讲道理我是真的想不明白这个14是怎么来的吖!
谢谢大家的帮助了ouo感恩!

jackz007 发表于 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 == aim:                   # 如果字符串切片 obj 与 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) , '次')

zltzlt 发表于 2019-11-16 20:19:39

你这是迭代 obj,因为 obj 的长度是 14,而每次迭代 count 加 1,所以 count 为 14。你应该这样改:

obj = input('请输入目标字符串:')
aim = input('请输入子字符串(两个字符):')
count = obj.count(aim)
print('子字符串在目标字符串中共出现',count,'次')

一只鸡腿肉包子 发表于 2019-11-16 20:48:48

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

我懂惹!谢谢您!!~

一只鸡腿肉包子 发表于 2019-11-16 20:49:20

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

你字多讲得还有道理!听你的!谢谢~好细心嗷!

一只鸡腿肉包子 发表于 2019-11-16 20:58:54

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

嗷好心人我刚test了一下你帮我修改后的代码怎么都返回是0来着QAQ
另外如果您愿意的话可不可以用#号帮我写个注释呢~

jackz007 发表于 2019-11-16 21:42:59

本帖最后由 jackz007 于 2019-11-16 21:45 编辑

一只鸡腿肉包子 发表于 2019-11-16 20:58
嗷好心人我刚test了一下你帮我修改后的代码怎么都返回是0来着QAQ
另外如果您愿意的话可不可以用#号帮我 ...

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

      说明一下,这个代码并不限于查找 2 个字符,长度可以不限。

一只鸡腿肉包子 发表于 2019-11-17 15:52:20

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

{:9_221:}天哪噜真的太感谢了!!谢谢你的帮助和耐心!!对于一个Python入门的小菜鸡来说真的帮助太大啦!!
页: [1]
查看完整版本: 零基础学习Python018那节课统计字符串频率的课后题相关问题