鱼C论坛

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

[已解决]关于def的问题

[复制链接]
发表于 2019-3-22 16:56:17 | 显示全部楼层 |阅读模式

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

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

x
def findstr(desStr,subStr):
    count = 0
    lenght = len(desStr)
    if subStr not in desStr:
        print('在目标字符中未找到')
    else:
        for each in range(lenght-1):
            if decStr[each] == subStr[0]:
                if decStr[each+1] == subStr[1]:
                    count += 1

        print('字字符串一共出现过 %d 次' % count)

decStr = input('请输入字符串:')
subStr = input('请输入字字符:')
findstr(decStr,subStr)


1.for循环里面的 lenght-1  不是很懂,-1的意义在哪里,
2.if decStr[each] == subStr[0]:
                if decStr[each+1] == subStr[1]:
       是通过如何来判定,子字符在母字符之中呢

3. 最后的print('字字符串一共出现过 %d 次' % count),,我改成了print('字字符串一共出现过' + count + '次' ),但是会报错,为什么呢
最佳答案
2019-3-22 18:01:42
本帖最后由 jackz007 于 2019-3-22 18:23 编辑

      没错,用 for 循环枚举字符串  decStr 中的每个字符确实应该用 range(length), 而之所以使用 length - 1 是因为在循环里要用到双字符比较,也就是  if decStr[each] == subStr[0]: 和 if decStr[each+1] == subStr[1]: 这两句,如果使用 range(length),那么,当 each = length - 1 的时候,each + 1 = length,而 decStr[length] 必然会越界的,这就是 for 循环使用 range(length - 1) 的原因。
      
  1.       if decStr[each] == subStr[0]:
  2.                 if decStr[each+1] == subStr[1]:
复制代码

      上面两句如果这样写可能要容易理解一些:
  1.     if decStr[each] == subStr[0] and decStr[each + 1] == subStr[1]:
复制代码

      意思是,在逐字符遍历字符串 decStr 的过程中,如果从索引 each 开始的连续 2 个字符都与 subStr 相同,则可以判定为找到了子串。

      这条语句:
  1.     print('字字符串一共出现过' + count + '次' )
复制代码

      改成这样就没有问题了:
  1.     print('字字符串一共出现过' + str(count) + '次' )
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-3-22 16:57:09 | 显示全部楼层
count是int,int不能和str相加
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-22 17:33:47 | 显示全部楼层
本帖最后由 大裤衩子 于 2019-3-22 17:39 编辑

1、length-1是因为这里的range从0开始的,到len(list())-1,刚好取到列表最后一个元素。
2、看这个判断条件的话,子串应该只能含有两个字符;遍历母串,其中某个字符和子串的第一字符相等,然后继续判断后面的字符,满足条件就计数加上一。
3、count是int类型,改成str(count)就OK啦!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-22 17:48:31 | 显示全部楼层

1、lenght-1是因为lenght = len(desStr),lenght是字符串(desStr)中字符的总个数,-1是因为在for循环里的第二个判断语句if decStr[each+1] == subStr[1]: 中循环到最后decStr[each+1]就是列表最后一个字符了
2、你这个程序只能判断相连的两个字符在一个字符串中出现的次数,及‘as’在‘asdfasdf’出现此时为2次,所有需要判断两次,第一次判断’a‘在不在,在判断字符串中’a‘后是不是’s‘
3、就是上边两位大佬说的了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-22 18:01:42 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2019-3-22 18:23 编辑

      没错,用 for 循环枚举字符串  decStr 中的每个字符确实应该用 range(length), 而之所以使用 length - 1 是因为在循环里要用到双字符比较,也就是  if decStr[each] == subStr[0]: 和 if decStr[each+1] == subStr[1]: 这两句,如果使用 range(length),那么,当 each = length - 1 的时候,each + 1 = length,而 decStr[length] 必然会越界的,这就是 for 循环使用 range(length - 1) 的原因。
      
  1.       if decStr[each] == subStr[0]:
  2.                 if decStr[each+1] == subStr[1]:
复制代码

      上面两句如果这样写可能要容易理解一些:
  1.     if decStr[each] == subStr[0] and decStr[each + 1] == subStr[1]:
复制代码

      意思是,在逐字符遍历字符串 decStr 的过程中,如果从索引 each 开始的连续 2 个字符都与 subStr 相同,则可以判定为找到了子串。

      这条语句:
  1.     print('字字符串一共出现过' + count + '次' )
复制代码

      改成这样就没有问题了:
  1.     print('字字符串一共出现过' + str(count) + '次' )
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-7 06:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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