鱼C论坛

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

[已解决]第19课:小问题,关于 i 和 i+1

[复制链接]
发表于 2021-1-11 14:43:32 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 Peteryo01223 于 2021-1-11 14:59 编辑

原题目:
编写一个函数,分别统计出传入字符串参数(可能不只一个参数)的英文字母、空格、数字和其它字符的个数。

标准答案:
  1. def count(*param):
  2.     length = len(param)
  3.     for i in range(length):
  4.         letters = 0
  5.         space = 0
  6.         digit = 0
  7.         others = 0
  8.         for each in param[i]:
  9.             if each.isalpha():
  10.                 letters += 1
  11.             elif each.isdigit():
  12.                 digit += 1
  13.             elif each == ' ':
  14.                 space += 1
  15.             else:
  16.                 others += 1
  17.         print('第 %d 个字符串共有:英文字母 %d 个,数字 %d 个,空格 %d 个,其他字符 %d 个。' % (i+1, letters, digit, space, others))
  18.             
  19. count('I love fishc.com.', 'I love you, you love me.')
复制代码


我的问题:
在第 17 行的 print 语句中,python 为什么能够通过 i+1 这个表达,就顺利地在结果中打印出 1 2 3...?
我的理解是:在第 3 行code中,for i in range(length):,这个 i 是param中的循环次数,一个不确定,但很可能挺大的一个数字。

谢谢。

最佳答案
2021-1-11 15:02:48
本帖最后由 昨非 于 2021-1-11 15:11 编辑
  1. def count(*param):  #传入字符串
  2.     length = len(param)   #取参数长度(一共多少个字符串)
  3.     for i in range(length):   #for循环,i的取值依次为:0,1,....一直到length-1,刚好可以作为索引值访问每个参数(每个字符串)
  4.         letters = 0
  5.         space = 0
  6.         digit = 0
  7.         others = 0
  8.         for each in param[i]:  #每次循环,i的值依次增加,对应的each就是第i个参数的各个字符
  9.             if each.isalpha():  #分门别类计数
  10.                 letters += 1
  11.             elif each.isdigit():
  12.                 digit += 1
  13.             elif each == ' ':
  14.                 space += 1
  15.             else:
  16.                 others += 1
  17.         print('第 %d 个字符串共有:英文字母 %d 个,数字 %d 个,空格 %d 个,其他字符 %d 个。' % (i+1, letters, digit, space, others))
  18.         #输出第i个参数的统计结果
  19.             
  20. count('I love fishc.com.', 'I love you, you love me.')
复制代码


需要注意的是:外层for循环对应遍历各个参数(参数中不止一个字符串),
内层for循环遍历每个参数(每个字符串)的各个字符,然后分开统计
最后print属于外层循环,每次的打印值对应每个参数(字符串)的统计结果
至于i+1的问题:
        i依次取值0,1....一直到length-1,是作为第i+1个参数(字符串)的索引值出现的
        (i从零开始取值,但习惯上计数从一开始,所以会有个+1)
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-1-11 14:55:18 | 显示全部楼层
本帖最后由 Peteryo01223 于 2021-1-11 15:08 编辑

突然发现这个问题,我问过。。。sorry 我看了一下9月22日某高手的回答,还是想不起来,怎么回事儿了。
某高手上次回答时,说:
  1. for i in range(length):
  2. # 外层循环,循环次数就是传进来的字符串个数
复制代码
  1. for each in param [i] :
  2. # param[i]就是第i个字符串,当i为0的时候,就是字符串'I love fishc.com',当i为2的时候就是字符串'There is a beautiful day'
复制代码


问题:这两句话里的 i,明明不一样,怎们都是 i 呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-11 15:02:48 | 显示全部楼层    本楼为最佳答案   
本帖最后由 昨非 于 2021-1-11 15:11 编辑
  1. def count(*param):  #传入字符串
  2.     length = len(param)   #取参数长度(一共多少个字符串)
  3.     for i in range(length):   #for循环,i的取值依次为:0,1,....一直到length-1,刚好可以作为索引值访问每个参数(每个字符串)
  4.         letters = 0
  5.         space = 0
  6.         digit = 0
  7.         others = 0
  8.         for each in param[i]:  #每次循环,i的值依次增加,对应的each就是第i个参数的各个字符
  9.             if each.isalpha():  #分门别类计数
  10.                 letters += 1
  11.             elif each.isdigit():
  12.                 digit += 1
  13.             elif each == ' ':
  14.                 space += 1
  15.             else:
  16.                 others += 1
  17.         print('第 %d 个字符串共有:英文字母 %d 个,数字 %d 个,空格 %d 个,其他字符 %d 个。' % (i+1, letters, digit, space, others))
  18.         #输出第i个参数的统计结果
  19.             
  20. count('I love fishc.com.', 'I love you, you love me.')
复制代码


需要注意的是:外层for循环对应遍历各个参数(参数中不止一个字符串),
内层for循环遍历每个参数(每个字符串)的各个字符,然后分开统计
最后print属于外层循环,每次的打印值对应每个参数(字符串)的统计结果
至于i+1的问题:
        i依次取值0,1....一直到length-1,是作为第i+1个参数(字符串)的索引值出现的
        (i从零开始取值,但习惯上计数从一开始,所以会有个+1)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-1-11 15:10:57 | 显示全部楼层
昨非 发表于 2021-1-11 15:02
需要注意的是:外层for循环对应遍历各个参数(参数中不止一个字符串),
内层for循环遍历每个参数(每 ...

好的,重复看了上次高手的注解,和你的注解,我好像懂了!谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-11 15:12:38 | 显示全部楼层
你的回复触发了审核机制
再通过之前我是看不到的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-26 13:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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