鱼C论坛

 找回密码
 立即注册
查看: 1673|回复: 17

[已解决]19讲课后题动动手第1题

[复制链接]
发表于 2020-7-9 13:08:54 | 显示全部楼层 |阅读模式

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

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

x
题目是:编写一个函数,分别统计出传入字符串参数(可能不只一个参数)的英文字母、空格、数字和其它字符的个数。
我的代码如下:
  1. def count(*strs):
  2.     english = 'abcdefghijklmnopqrstuvwxyz'
  3.     number = '0123456789'
  4.     others = '.'
  5.     length = len(strs)
  6.    
  7.     for i in range(length):
  8.         x = 0
  9.         y = 0
  10.         z = 0
  11.         if strs[i] in english:
  12.             x += 1
  13.            
  14.         elif strs[i] in number:
  15.             y += 1

  16.         elif strs[i] in others:
  17.             z += 1

  18.         a = length - x -y-z

  19.     print('第%d个字符串共有:英文字母 %d 个,数字 %d个,空格 %d 个,其他字符 %d个 ' % (i+1,x,y,a,z))

  20. count('love123')
复制代码



我的代码运行之后,为什么显示英文字母,数字和其他字符都是0呢,空格却显示为1个
麻烦路过的大佬若有时间帮帮我呗
最佳答案
2020-7-9 13:16:54
本帖最后由 lhgzbxhz 于 2020-7-10 08:53 编辑

你传入的是一堆字符串,所以
  1. strs[i]
复制代码
应该是一个str型的变量,怎么还用in呢?
应该这样:
  1. def count(*strs):
  2.     english = 'abcdefghijklmnopqrstuvwxyz'
  3.     number = '0123456789'
  4.     others = ' '

  5.     for n, s in enumerate(strs):
  6.         length = len(s)
  7.         x = 0
  8.         y = 0
  9.         z = 0
  10.         a = 0
  11.         for i in range(length):
  12.             if s[i] in english:
  13.                 x += 1

  14.             elif s[i] in number:
  15.                 y += 1

  16.             elif s[i] in others:
  17.                 z += 1

  18.             a = length - x - y - z

  19.         print('第%d个字符串共有:英文字母 %d 个,数字 %d个,空格 %d 个,其他字符 %d个 ' % (n + 1, x, y, a, z))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-7-9 13:11:55 | 显示全部楼层
本帖最后由 Twilight6 于 2020-7-9 13:17 编辑


改成这样即可,原因看注释吧:

  1. def count(*strs):
  2.     english = 'abcdefghijklmnopqrstuvwxyz'
  3.     number = '0123456789'
  4.     space = ' '   # 这边判断是否为空格,而不是 .   其他字符不止有 . 而你判断空格就好,其他字符就是最后剩下的结果
  5.     length = len(strs)

  6.     for i in range(length):
  7.         x = 0
  8.         y = 0
  9.         z = 0
  10.         for each in strs[i]:  # 循环参数内的字符串的字母
  11.             if each in english:
  12.                 x += 1

  13.             elif each in number:
  14.                 y += 1

  15.             elif each in space:
  16.                 z += 1

  17.         a = len(strs[i]) - x - y - z  # a 代表其他字符,这边要 len 参数内的长度 而不是原本的字符

  18.         print('第%d个字符串共有:英文字母 %d 个,数字 %d个,空格 %d 个,其他字符 %d个 ' % (i + 1, x, y, z,a))


  19. count('love ... 123')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-9 13:12:58 | 显示全部楼层
本帖最后由 qiuyouzhi 于 2020-7-9 14:11 编辑

strs是一个可变参数,返回值是一个元组,用len(strs)返回值是元组的长度,而不是元组内元素的长度。
改成这样就好了:
  1. def count(*strs):
  2.     english = 'abcdefghijklmnopqrstuvwxyz'
  3.     number = '0123456789'
  4.     others = '.'
  5.     x = 0
  6.     y = 0
  7.     z = 0
  8.     a = 0
  9.     n = 0

  10.     for each in strs:
  11.         n += 1
  12.         for i in range(len(each)):
  13.             if each[i] in english:
  14.                 x += 1
  15.            
  16.             elif each[i] in number:
  17.                 y += 1

  18.             elif each[i] in others:
  19.                 z += 1
  20.             elif each[i] == ' ':
  21.                 a += 1


  22.         print('第%d个字符串共有:英文字母 %d 个,数字 %d个,空格 %d 个,其他字符 %d个 ' % (n,x,y,a,z))

  23. count('love123')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-9 13:16:18 | 显示全部楼层
qiuyouzhi 发表于 2020-7-9 13:12
strs是一个可变参数,返回值是一个元组,用len(strs)返回值是元组的长度,而不是元组内元素的长度。
改成 ...




你的代码输入其他字符也会统计并显示为空格的数量

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
qiuyouzhi + 5 + 5 + 3 感谢!

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-9 13:16:54 | 显示全部楼层    本楼为最佳答案   
本帖最后由 lhgzbxhz 于 2020-7-10 08:53 编辑

你传入的是一堆字符串,所以
  1. strs[i]
复制代码
应该是一个str型的变量,怎么还用in呢?
应该这样:
  1. def count(*strs):
  2.     english = 'abcdefghijklmnopqrstuvwxyz'
  3.     number = '0123456789'
  4.     others = ' '

  5.     for n, s in enumerate(strs):
  6.         length = len(s)
  7.         x = 0
  8.         y = 0
  9.         z = 0
  10.         a = 0
  11.         for i in range(length):
  12.             if s[i] in english:
  13.                 x += 1

  14.             elif s[i] in number:
  15.                 y += 1

  16.             elif s[i] in others:
  17.                 z += 1

  18.             a = length - x - y - z

  19.         print('第%d个字符串共有:英文字母 %d 个,数字 %d个,空格 %d 个,其他字符 %d个 ' % (n + 1, x, y, a, z))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-9 14:13:05 | 显示全部楼层
lhgzbxhz 发表于 2020-7-9 13:16
你传入的是一堆字符串,所以strs应该是一个str型的变量,怎么还用in呢?
应该这样:

看来你学的不够扎实啊
由于strs是一个可变参数,所以会被打包成元组类型,不是字符串类型。

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +5 收起 理由
Twilight6 + 5 + 5 + 5 鱼C有你更精彩^_^

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-7-9 14:28:51 | 显示全部楼层
本帖最后由 lhgzbxhz 于 2020-7-9 14:29 编辑
qiuyouzhi 发表于 2020-7-9 14:13
看来你学的不够扎实啊
由于strs是一个可变参数,所以会被打包成元组类型,不是字符串类型。

  1. strs[i]
复制代码
不是strs
  1. [i]
复制代码
坑了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-9 14:30:56 | 显示全部楼层
lhgzbxhz 发表于 2020-7-9 14:28
是不是strs
被坑了

可你是这么说的
所以strs应该是一个str型的变量
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-9 14:32:33 | 显示全部楼层


是论坛自动把
  1. [i]
复制代码
识别成了标签,不信你在回复区打个
  1. str[i]
复制代码
试试
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-9 15:58:08 | 显示全部楼层
Twilight6 发表于 2020-7-9 13:11
改成这样即可,原因看注释吧:

谢谢您了
但是还想请问,我认为这个 len(strs[i]) 不该是1吗,为什么是12呢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-9 15:58:56 | 显示全部楼层
qiuyouzhi 发表于 2020-7-9 13:12
strs是一个可变参数,返回值是一个元组,用len(strs)返回值是元组的长度,而不是元组内元素的长度。
改成 ...

感谢感谢!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-9 15:59:35 | 显示全部楼层
lhgzbxhz 发表于 2020-7-9 14:32
是论坛自动把识别成了标签,不信你在回复区打个试试

好吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-9 16:00:01 | 显示全部楼层
倪劳资 发表于 2020-7-9 15:58
谢谢您了
但是还想请问,我认为这个 len(strs) 不该是1吗,为什么是12呢

因为 strs 是你设置的传入的参数,所以当你传入一个字符串参数时候 len (strs) 就等于 1

当你传入两个字符串的时候 len(strs) 就等于 2

*strs 就是可以接收不定量参数用的,将你全部填入的参数都保留在 strs 元组中
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-9 16:13:38 | 显示全部楼层
lhgzbxhz 发表于 2020-7-9 13:16
你传入的是一堆字符串,所以strs应该是一个str型的变量,怎么还用in呢?
应该这样:

谢谢辽
但我还想请问一下, for n,s in enumerate(strs) 中,这个n是什么作用呢,s是得到元组
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-9 16:20:38 | 显示全部楼层
Twilight6 发表于 2020-7-9 16:00
因为 strs 是你设置的传入的参数,所以当你传入一个字符串参数时候 len (strs) 就等于 1

当你传入两 ...

okk,谢谢您了  

点评

不,我坚决不同意楼主的看法!: 1.0
不,我坚决不同意楼主的看法!: 1
最佳请合理给予!  发表于 2020-7-9 16:25
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

发表于 2020-7-9 16:46:44 | 显示全部楼层
倪劳资 发表于 2020-7-9 16:13
谢谢辽
但我还想请问一下, for n,s in enumerate(strs) 中,这个n是什么作用呢,s ...

举个例子就知道了:
  1. nums = [1, 2, 3, 4, 5]
  2. for n in enumerate(nums):
  3.     print(n)
  4. """输出结果:
  5. (0, 1)
  6. (1, 2)
  7. (2, 3)
  8. (3, 4)
  9. (4, 5)
  10. """

  11. for i, n in enumerate(nums):
  12.     print(i, n)
  13. """输出结果:
  14. 0 1
  15. 1 2
  16. 2 3
  17. 3 4
  18. 4 5
  19. """
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-9 18:37:20 | 显示全部楼层
lhgzbxhz 发表于 2020-7-9 16:46
举个例子就知道了:

好滴好滴,谢谢啦!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-23 07:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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