倪劳资 发表于 2020-7-9 13:08:54

19讲课后题动动手第1题

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

      elif strs in others:
            z += 1

      a = length - x -y-z

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

count('love123')


我的代码运行之后,为什么显示英文字母,数字和其他字符都是0呢,空格却显示为1个
麻烦路过的大佬若有时间帮帮我呗{:10_303:} {:10_303:}

Twilight6 发表于 2020-7-9 13:11:55

本帖最后由 Twilight6 于 2020-7-9 13:17 编辑


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

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

    for i in range(length):
      x = 0
      y = 0
      z = 0
      for each in strs:# 循环参数内的字符串的字母
            if each in english:
                x += 1

            elif each in number:
                y += 1

            elif each in space:
                z += 1

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

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


count('love ... 123')

qiuyouzhi 发表于 2020-7-9 13:12:58

本帖最后由 qiuyouzhi 于 2020-7-9 14:11 编辑

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

    for each in strs:
      n += 1
      for i in range(len(each)):
            if each in english:
                x += 1
         
            elif each in number:
                y += 1

            elif each in others:
                z += 1
            elif each == ' ':
                a += 1


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

count('love123')

Twilight6 发表于 2020-7-9 13:16:18

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



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

lhgzbxhz 发表于 2020-7-9 13:16:54

本帖最后由 lhgzbxhz 于 2020-7-10 08:53 编辑

你传入的是一堆字符串,所以strs应该是一个str型的变量,怎么还用in呢?
应该这样:
def count(*strs):
    english = 'abcdefghijklmnopqrstuvwxyz'
    number = '0123456789'
    others = ' '

    for n, s in enumerate(strs):
      length = len(s)
      x = 0
      y = 0
      z = 0
      a = 0
      for i in range(length):
            if s in english:
                x += 1

            elif s in number:
                y += 1

            elif s in others:
                z += 1

            a = length - x - y - z

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

qiuyouzhi 发表于 2020-7-9 14:13:05

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

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

lhgzbxhz 发表于 2020-7-9 14:28:51

本帖最后由 lhgzbxhz 于 2020-7-9 14:29 编辑

qiuyouzhi 发表于 2020-7-9 14:13
看来你学的不够扎实啊
由于strs是一个可变参数,所以会被打包成元组类型,不是字符串类型。
是strs不是strs
被坑了

qiuyouzhi 发表于 2020-7-9 14:30:56

lhgzbxhz 发表于 2020-7-9 14:28
是不是strs
被坑了

可你是这么说的
所以strs应该是一个str型的变量

lhgzbxhz 发表于 2020-7-9 14:32:33

qiuyouzhi 发表于 2020-7-9 14:30
可你是这么说的

是论坛自动把识别成了标签,不信你在回复区打个str试试

倪劳资 发表于 2020-7-9 15:58:08

Twilight6 发表于 2020-7-9 13:11
改成这样即可,原因看注释吧:

谢谢您了{:10_266:}
但是还想请问,我认为这个 len(strs) 不该是1吗,为什么是12呢{:10_272:}

倪劳资 发表于 2020-7-9 15:58:56

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

感谢感谢!{:10_323:}

qiuyouzhi 发表于 2020-7-9 15:59:35

lhgzbxhz 发表于 2020-7-9 14:32
是论坛自动把识别成了标签,不信你在回复区打个试试

好吧

Twilight6 发表于 2020-7-9 16:00:01

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

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

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

*strs 就是可以接收不定量参数用的,将你全部填入的参数都保留在 strs 元组中

倪劳资 发表于 2020-7-9 16:13:38

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

谢谢辽{:10_323:}
但我还想请问一下, for n,s in enumerate(strs) 中,这个n是什么作用呢{:10_272:},s是得到元组

倪劳资 发表于 2020-7-9 16:20:38

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

当你传入两 ...

okk,谢谢您了{:10_323:}

lhgzbxhz 发表于 2020-7-9 16:46:44

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

举个例子就知道了:
nums =
for n in enumerate(nums):
    print(n)
"""输出结果:
(0, 1)
(1, 2)
(2, 3)
(3, 4)
(4, 5)
"""

for i, n in enumerate(nums):
    print(i, n)
"""输出结果:
0 1
1 2
2 3
3 4
4 5
"""

倪劳资 发表于 2020-7-9 18:37:20

lhgzbxhz 发表于 2020-7-9 16:46
举个例子就知道了:

好滴好滴,谢谢啦!{:5_106:}
页: [1]
查看完整版本: 19讲课后题动动手第1题