鱼C论坛

 找回密码
 立即注册
查看: 4415|回复: 12

[已解决]零基础入门学习Python第18讲课后作业动动手第2题

[复制链接]
发表于 2020-11-22 16:43:43 | 显示全部楼层 |阅读模式

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

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

x
第一个问题:

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

请问这两句为啥不能紧接着第一句写呢?而是一定要放在最后呢?

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

第二个问题呢

for each1 in range(length-1):

突然冒出个 each1,这一句中 each1 如何定义的呢?

后面 each1+1 更是一头雾水
if desStr[each1] == subStr[0]:
                if desStr[each1+1] == subStr[1]:

感谢高手指点
最佳答案
2020-11-22 21:05:41
本帖最后由 昨非 于 2020-11-22 21:07 编辑

先上标准答案:
  1. def findStr(desStr, subStr):     
  2.     count = 0
  3.     length = len(desStr)
  4.     if subStr not in desStr:
  5.         print('在目标字符串中未找到字符串!')
  6.     else:
  7.         for each1 in range(length-1):      
  8.             if desStr[each1] == subStr[0]:
  9.                 if desStr[each1+1] == subStr[1]:
  10.                     count += 1
  11.                     
  12.         print('子字符串在目标字符串中共出现 %d 次' % count)

  13. desStr = input('请输入目标字符串:')
  14. subStr = input('请输入子字符串(两个字符):')
  15. findStr(desStr, subStr)
复制代码


问题一:
答:上面def后的一大堆是对函数的定义

  1. desStr = input('请输入目标字符串:')
  2. subStr = input('请输入子字符串(两个字符):')
  3. findStr(desStr, subStr)
复制代码

是对函数的调用,之所以这么写,是想将这一功能封装为函数,不想写成函数,你大可把def定义函数的部分去掉,直接遍历字符串内容
第十八讲名字就是《函数》,这里还有问题需要反思一下自己咋学的了


问题二:
  1. def findStr(desStr, subStr):     
  2.     count = 0
  3.     length = len(desStr)
  4.     if subStr not in desStr:
  5.         print('在目标字符串中未找到字符串!')
  6.     else: #这里的条件是字串在目标字符串里
  7.         for each1 in range(length-1): #length为目标字符串的长度,减一刚好是目标串的索引范围
  8.             #而for...in range(n)的语法中,...只是一个循环变量名字而已,叫i,j,k,each,什么都可以,它的取值是range函数规定的,0到n-1;
  9.             # each1就是下面要用到的字符串索引值     
  10.             if desStr[each1] == subStr[0]:  #这里只不过是比较目标串的各个字符有没有和字串第一个字符相同的,如果相同,进入下一层判断
  11.                 if desStr[each1+1] == subStr[1]: #与字串第一个字符匹配后,移到后一位字符进行判断,索引值加一就是后移一位,没什么难理解的
  12.                     count += 1 #前两个条件都满足了,计数出现次数加一
  13.                     
  14.         print('子字符串在目标字符串中共出现 %d 次' % count)
复制代码



我感觉我讲清楚了,你再看看

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-22 17:06:46 | 显示全部楼层
请问这两句为啥不能紧接着第一句写呢?而是一定要放在最后呢?

        这句话是什么意思,如果完全依你,你希望这两句写成什么样子?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-22 17:30:22 | 显示全部楼层
each1就是将length-1(因为索引是从0开始所以得减1)for循环这样才能挨个与substr比较哦

if desStr[each1] == subStr[0]:
                if desStr[each1+1] == subStr[1]:
defstr[each1]相当于索引与substr作比较
因为题目说的是两个子字符串所以还得desstr[each+1]我的理解是这样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-22 21:05:41 | 显示全部楼层    本楼为最佳答案   
本帖最后由 昨非 于 2020-11-22 21:07 编辑

先上标准答案:
  1. def findStr(desStr, subStr):     
  2.     count = 0
  3.     length = len(desStr)
  4.     if subStr not in desStr:
  5.         print('在目标字符串中未找到字符串!')
  6.     else:
  7.         for each1 in range(length-1):      
  8.             if desStr[each1] == subStr[0]:
  9.                 if desStr[each1+1] == subStr[1]:
  10.                     count += 1
  11.                     
  12.         print('子字符串在目标字符串中共出现 %d 次' % count)

  13. desStr = input('请输入目标字符串:')
  14. subStr = input('请输入子字符串(两个字符):')
  15. findStr(desStr, subStr)
复制代码


问题一:
答:上面def后的一大堆是对函数的定义

  1. desStr = input('请输入目标字符串:')
  2. subStr = input('请输入子字符串(两个字符):')
  3. findStr(desStr, subStr)
复制代码

是对函数的调用,之所以这么写,是想将这一功能封装为函数,不想写成函数,你大可把def定义函数的部分去掉,直接遍历字符串内容
第十八讲名字就是《函数》,这里还有问题需要反思一下自己咋学的了


问题二:
  1. def findStr(desStr, subStr):     
  2.     count = 0
  3.     length = len(desStr)
  4.     if subStr not in desStr:
  5.         print('在目标字符串中未找到字符串!')
  6.     else: #这里的条件是字串在目标字符串里
  7.         for each1 in range(length-1): #length为目标字符串的长度,减一刚好是目标串的索引范围
  8.             #而for...in range(n)的语法中,...只是一个循环变量名字而已,叫i,j,k,each,什么都可以,它的取值是range函数规定的,0到n-1;
  9.             # each1就是下面要用到的字符串索引值     
  10.             if desStr[each1] == subStr[0]:  #这里只不过是比较目标串的各个字符有没有和字串第一个字符相同的,如果相同,进入下一层判断
  11.                 if desStr[each1+1] == subStr[1]: #与字串第一个字符匹配后,移到后一位字符进行判断,索引值加一就是后移一位,没什么难理解的
  12.                     count += 1 #前两个条件都满足了,计数出现次数加一
  13.                     
  14.         print('子字符串在目标字符串中共出现 %d 次' % count)
复制代码



我感觉我讲清楚了,你再看看

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-11-22 22:02:07 | 显示全部楼层
昨非 发表于 2020-11-22 21:05
先上标准答案:

您好,我估计问题一是不是没有讲清楚:
def findStr(desStr, subStr):
      desStr = input('请输入目标字符串:')
      subStr = input('请输入子字符串(两个字符):')
      count = 0
      length = len(desStr)

我的意思是下面两句紧跟着第一句后面可以吗?也就是把这两句搬到这个位置,但是运行函数就出错。出错提示是 desStr 没有定义。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-22 22:14:03 | 显示全部楼层
rychair 发表于 2020-11-22 22:02
您好,我估计问题一是不是没有讲清楚:
def findStr(desStr, subStr):
      desStr = input('请输入 ...

上面时函数定义,下面是调用,def后的desStr, subStr时形式参数
而input输入的是实参,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-22 22:19:56 | 显示全部楼层
不写在def里面的好处就是,最后调用的时候
我想给输入起什么名字都可以,
  1. a = input('请输入目标字符串:')
  2. b = input('请输入子字符串(两个字符):')
  3. findStr(a, b)
复制代码
而写在函数里是不行的,写在里面语法上就说不通,没有调用,形参实参还是混的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-22 22:26:45 | 显示全部楼层
rychair 发表于 2020-11-22 22:02
您好,我估计问题一是不是没有讲清楚:
def findStr(desStr, subStr):
      desStr = input('请输入 ...

你还是没理解函数的定义和调用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-22 22:31:11 | 显示全部楼层
昨非 发表于 2020-11-22 22:26
你还是没理解函数的定义和调用

确实是一知半解。现在都要看两遍视频,看两遍书,再加上习题和请教,才能逐步加深理解。感谢您的时间。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-22 22:35:08 | 显示全部楼层
rychair 发表于 2020-11-22 22:31
确实是一知半解。现在都要看两遍视频,看两遍书,再加上习题和请教,才能逐步加深理解。感谢您的时间。

这倒是没什么

你就像着def定义函数的时候,形参是一个模具,是不具体的,只要格式符合要求的实参都可以传入(替换定义中形参的位置执行)
而调用的时候需要输入的参数是具体的,所以要input输入,(只要格式正确),变量名怎么起随你便,可以不同,,,,

只能讲到这一地步了,好好想想吧,不难理解的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-23 18:47:08 | 显示全部楼层
昨非 发表于 2020-11-22 22:35
这倒是没什么

你就像着def定义函数的时候,形参是一个模具,是不具体的,只要格式符合要求的实参都可 ...

谢谢高手
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-2 15:58:29 | 显示全部楼层
昨非 发表于 2020-11-22 21:05
先上标准答案:

为什么range()的length要减1呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-15 21:59:13 | 显示全部楼层
本帖最后由 python梦 于 2021-10-16 11:38 编辑
Zzzzzx. 发表于 2021-6-2 15:58
为什么range()的length要减1呢


把1看作目标字符串最后一个字符,相当于最后一个字符串不加入比较,子字符串有两位,目标却只剩一个字符,可想而知,次数不会加一,就没有比较之说了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 16:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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