鱼C论坛

 找回密码
 立即注册
查看: 1824|回复: 6

[已解决]第二十课课后作业

[复制链接]
发表于 2020-1-15 21:15:23 | 显示全部楼层 |阅读模式

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

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

x
  1. def count(*param):
  2.     length = len(param)
  3.     for i in range(length):
  4.         word = 0
  5.         num = 0
  6.         spa = 0
  7.         oth = 0
  8.         for j in param[i]:
  9.             if j.isalpha():
  10.                 word += 1
  11.             elif j.isspace():
  12.                 spa += 1
  13.             elif j.isdigit():
  14.                 num += 1
  15.             else:
  16.                 oth += 1
  17.         print('第 %d 个字符串共有:英文字母 %d 个,数字 %d 个,空格 %d 个,其他字符 %d 个'
  18.                % (i + 1, word, num, spa, oth))

  19. count('I love fish.com 123', 'I love you', 'you love 123')
复制代码


我就最后一个:第 %d 个字符串格式化后为什么是i+1 没有弄明白,求指导
最佳答案
2020-1-15 21:30:14
yjptx121 发表于 2020-1-15 21:29
不好意思,我没有表达清楚我的问题,我是没有弄懂第()个字符串与 i 之间的关系

假如是第 1 个字符串,则 i 为 0;是第 2 个字符串,则 i 为 1;是第 3 个字符串,则 i 为 3 ……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-1-15 21:16:25 | 显示全部楼层
i 是从 0 ~ length-1 的,我们不想打印 '第 0 个字符串',就要将 i 加 1,使其变成 '第 1 个字符串'。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-1-15 21:29:02 | 显示全部楼层
zltzlt 发表于 2020-1-15 21:16
i 是从 0 ~ length-1 的,我们不想打印 '第 0 个字符串',就要将 i 加 1,使其变成 '第 1 个字符串'。

不好意思,我没有表达清楚我的问题,我是没有弄懂第()个字符串与 i 之间的关系
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-15 21:30:14 | 显示全部楼层    本楼为最佳答案   
yjptx121 发表于 2020-1-15 21:29
不好意思,我没有表达清楚我的问题,我是没有弄懂第()个字符串与 i 之间的关系

假如是第 1 个字符串,则 i 为 0;是第 2 个字符串,则 i 为 1;是第 3 个字符串,则 i 为 3 ……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-1-15 21:40:16 | 显示全部楼层
zltzlt 发表于 2020-1-15 21:30
假如是第 1 个字符串,则 i 为 0;是第 2 个字符串,则 i 为 1;是第 3 个字符串,则 i 为 3 ……

我想明白了,请教一下我这样理解对不对,
*param 代表一个不确定长度的参数,length = len(param)的结果实际就是表示了括号中有几个参数(param【0】就表示是第一个参数,param【1】就表示是第二个参数),而 i 是属于range(length),即如果有只有一个参数,那么 i 就是0,如果有两个参数,那么 i = 0,1,以此类推,又因为不确定*param有几个参数,那么如果只有1个参数,count()就会运行一次,如果2个参数,就运行两次,在这个程序中, *param  和 length = len(param)是关键
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-15 22:15:52 | 显示全部楼层
本帖最后由 jackz007 于 2020-1-15 22:19 编辑

       代码这么写似乎更加 Pythonic 一些。
  1. def count(* param):
  2.     for k in range(len(param)):
  3.         a = sum([1 for x in param[k] if x . isalpha()])
  4.         d = sum([1 for x in param[k] if x . isdigit()])
  5.         b = sum([1 for x in param[k] if x . isspace()])
  6.         o = len(param[k]) - a - d - b
  7.         print('第 %d 个字符串共有:英文字母 %d 个,数字 %d 个,空格 %d 个,其他字符 %d 个' % (k , a , d , b , o)      

  8. count('I love fish.com 123' , 'I love you', 'you love 123')
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-1-16 21:56:55 | 显示全部楼层
jackz007 发表于 2020-1-15 22:15
代码这么写似乎更加 Pythonic 一些。

又学到新知识了哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 08:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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