Peteryo01223 发表于 2021-1-11 14:43:32

第19课:小问题,关于 i 和 i+1

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

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

标准答案:
def count(*param):
    length = len(param)
    for i in range(length):
      letters = 0
      space = 0
      digit = 0
      others = 0
      for each in param:
            if each.isalpha():
                letters += 1
            elif each.isdigit():
                digit += 1
            elif each == ' ':
                space += 1
            else:
                others += 1
      print('第 %d 个字符串共有:英文字母 %d 个,数字 %d 个,空格 %d 个,其他字符 %d 个。' % (i+1, letters, digit, space, others))
            
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中的循环次数,一个不确定,但很可能挺大的一个数字。

谢谢。

Peteryo01223 发表于 2021-1-11 14:55:18

本帖最后由 Peteryo01223 于 2021-1-11 15:08 编辑

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

问题:这两句话里的 i,明明不一样,怎们都是 i 呢?

昨非 发表于 2021-1-11 15:02:48

本帖最后由 昨非 于 2021-1-11 15:11 编辑

def count(*param):#传入字符串
    length = len(param)   #取参数长度(一共多少个字符串)
    for i in range(length):   #for循环,i的取值依次为:0,1,....一直到length-1,刚好可以作为索引值访问每个参数(每个字符串)
      letters = 0
      space = 0
      digit = 0
      others = 0
      for each in param:#每次循环,i的值依次增加,对应的each就是第i个参数的各个字符
            if each.isalpha():#分门别类计数
                letters += 1
            elif each.isdigit():
                digit += 1
            elif each == ' ':
                space += 1
            else:
                others += 1
      print('第 %d 个字符串共有:英文字母 %d 个,数字 %d 个,空格 %d 个,其他字符 %d 个。' % (i+1, letters, digit, space, others))
      #输出第i个参数的统计结果
            
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)

Peteryo01223 发表于 2021-1-11 15:10:57

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

好的,重复看了上次高手的注解,和你的注解,我好像懂了!谢谢

昨非 发表于 2021-1-11 15:12:38

你的回复触发了审核机制
再通过之前我是看不到的
页: [1]
查看完整版本: 第19课:小问题,关于 i 和 i+1