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)
还有问一下,怎么悬赏。。。 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的索引超出索引范围 逃兵 发表于 2021-4-17 11:36
else中的整体逻辑是
遍历在字符串desStr的索引值-1
大神你好!
desStr这个索引为啥是each1,可以替换成其他的吗? 逃兵 发表于 2021-4-17 11:36
else中的整体逻辑是
遍历在字符串desStr的索引值-1
还是这个each1,是和each一样用法吗? 这里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)
逃兵 发表于 2021-4-17 15:13
这里each1只是个简单的变量名而已,可以替换为任何角色
在for each1 in range(length-1):这语句中定义的ea ...
感谢解答!
我想问一下第一段代码 each 改成 i 的话
不就和上面for iin range(length-1)重复了吗?
这样不会影响吗? Ginkwey 发表于 2021-4-17 15:24
感谢解答!
我想问一下第一段代码 each 改成 i 的话
不就和上面for iin range(length-1)重复了吗?
贴一下each和i重复的代码,我没有看到有出现重复的情况 逃兵 发表于 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)
逃兵 发表于 2021-4-17 15:37
贴一下each和i重复的代码,我没有看到有出现重复的情况
else里面 for 我用“#”写的标注 Ginkwey 发表于 2021-4-17 15:53
else里面 for 我用“#”写的标注
下面的i就是调用的上面的那个i
第一次i=0
desStr和desStr
第二次i=1
desStr和desStr
...
第n次i=n-1
desStr和desStr 逃兵 发表于 2021-4-17 16:24
下面的i就是调用的上面的那个i
第一次i=0
desStr和desStr
谢谢!{:10_298:}
页:
[1]