Ginkwey 发表于 2021-4-17 10:58:47

18讲最后一题求解

本帖最后由 Ginkwey 于 2021-4-17 11:01 编辑

请问一下各位鱼油

第18讲最后一题的这段代码

else里说的是什么意思?

看完代码感觉有点抽象,看不懂。

能帮忙解释或者注释下吗?


def findStr(desStr, subStr):
    count = 0
    length = len(desStr)
    if subStr not in desStr:
      print('在目标字符串中未找到字符串!')
    else:
      for each1 in range(length-1):      
            if desStr == subStr:
                if desStr == subStr:
                  count += 1
                  
      print('子字符串在目标字符串中共出现 %d 次' % count)

desStr = input('请输入目标字符串:')
subStr = input('请输入子字符串(两个字符):')
findStr(desStr, subStr)



还有问一下,怎么悬赏。。。

逃兵 发表于 2021-4-17 11:36:33

def findStr(desStr, subStr):
    count = 0
    length = len(desStr)
    if subStr not in desStr:
      print('在目标字符串中未找到字符串!')
    else:
      for each1 in range(length-1):      #遍历字符串desStr的索引值each1,一直到倒数第二位(length-1)
            if desStr == subStr:#判断desStr中第each1个字符与subStr的0个字符相同
                if desStr == subStr: #如果上面的判断成立,再判断desStr中第each1+1个字符与subStr的1个字符相同
                  count += 1#统计次数+1次
                     
      print('子字符串在目标字符串中共出现 %d 次' % count)

desStr = input('请输入目标字符串:')
subStr = input('请输入子字符串(两个字符):')
findStr(desStr, subStr)


else中的整体逻辑是

遍历在字符串desStr的索引值-1

    判断字符串desStr索引位置对应的元素是否与subStr的第0个元素相同

      再判断desStr索引位置+1对应的元素是否与subStr的第1个元素相同

            如果以上两个条件都成立,证明目标字符串出现过,统计次数count就+1次

一直遍历到最后,目标字符串出现了几次,统计次数count就加几次

为什么要遍历在字符串desStr的索引值-1而非索引值本身呢

是因为如果desStr最后一个字符等于subStr时,避免desStr的索引超出索引范围

Ginkwey 发表于 2021-4-17 14:56:29

逃兵 发表于 2021-4-17 11:36
else中的整体逻辑是

遍历在字符串desStr的索引值-1


大神你好!
desStr这个索引为啥是each1,可以替换成其他的吗?

Ginkwey 发表于 2021-4-17 14:59:22

逃兵 发表于 2021-4-17 11:36
else中的整体逻辑是

遍历在字符串desStr的索引值-1


还是这个each1,是和each一样用法吗?

逃兵 发表于 2021-4-17 15:13:55

这里each1只是个简单的变量名而已,可以替换为任何角色
在for each1 in range(length-1):这语句中定义的each1
我们可以修改成自己喜欢的变量名

改成i
def findStr(desStr, subStr):
    count = 0
    length = len(desStr)
    if subStr not in desStr:
      print('在目标字符串中未找到字符串!')
    else:
      for i in range(length-1):      
            if desStr == subStr:
                if desStr == subStr:
                  count += 1
                  
      print('子字符串在目标字符串中共出现 %d 次' % count)

desStr = input('请输入目标字符串:')
subStr = input('请输入子字符串(两个字符):')
findStr(desStr, subStr)


改成each

def findStr(desStr, subStr):
    count = 0
    length = len(desStr)
    if subStr not in desStr:
      print('在目标字符串中未找到字符串!')
    else:
      for each in range(length-1):      
            if desStr == subStr:
                if desStr == subStr:
                  count += 1
                  
      print('子字符串在目标字符串中共出现 %d 次' % count)

desStr = input('请输入目标字符串:')
subStr = input('请输入子字符串(两个字符):')
findStr(desStr, subStr)


需要注意的是,在遍历的过程中,不要造成变量名的污染

比如下面这个实例
我们先给each定义为字符串'逃兵'
之后又将each作为遍历的变量名,造成变量名污染
再次打印each时,已经变为9了(因为range(10)最后一位为9,此时的each就变为9了)

each = '逃兵'

for each in range(10):
    print('each遍历')

print(each)

Ginkwey 发表于 2021-4-17 15:24:55

逃兵 发表于 2021-4-17 15:13
这里each1只是个简单的变量名而已,可以替换为任何角色
在for each1 in range(length-1):这语句中定义的ea ...

感谢解答!
我想问一下第一段代码 each 改成 i 的话
不就和上面for iin range(length-1)重复了吗?
这样不会影响吗?

逃兵 发表于 2021-4-17 15:37:15

Ginkwey 发表于 2021-4-17 15:24
感谢解答!
我想问一下第一段代码 each 改成 i 的话
不就和上面for iin range(length-1)重复了吗?


贴一下each和i重复的代码,我没有看到有出现重复的情况

Ginkwey 发表于 2021-4-17 15:47:10

逃兵 发表于 2021-4-17 15:37
贴一下each和i重复的代码,我没有看到有出现重复的情况

def findStr(desStr, subStr):
    count = 0
    length = len(desStr)
    if subStr not in desStr:
      print('在目标字符串中未找到字符串!')
    else:
      for i in range(length-1):#这个i和下面的i一样吗?      
            if desStr == subStr:
                if desStr == subStr:
                  count += 1
                  
      print('子字符串在目标字符串中共出现 %d 次' % count)

desStr = input('请输入目标字符串:')
subStr = input('请输入子字符串(两个字符):')
findStr(desStr, subStr)

Ginkwey 发表于 2021-4-17 15:53:33

逃兵 发表于 2021-4-17 15:37
贴一下each和i重复的代码,我没有看到有出现重复的情况

else里面 for 我用“#”写的标注

逃兵 发表于 2021-4-17 16:24:40

Ginkwey 发表于 2021-4-17 15:53
else里面 for 我用“#”写的标注

下面的i就是调用的上面的那个i
第一次i=0
desStr和desStr
第二次i=1
desStr和desStr
...
第n次i=n-1
desStr和desStr

Ginkwey 发表于 2021-4-17 16:34:21

逃兵 发表于 2021-4-17 16:24
下面的i就是调用的上面的那个i
第一次i=0
desStr和desStr


谢谢!{:10_298:}
页: [1]
查看完整版本: 18讲最后一题求解