鱼C论坛

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

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

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

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

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

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

        elif strs[i] 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个
麻烦路过的大佬若有时间帮帮我呗
最佳答案
2020-7-9 13:16:54
本帖最后由 lhgzbxhz 于 2020-7-10 08:53 编辑

你传入的是一堆字符串,所以
strs[i]
应该是一个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[i] in english:
                x += 1

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

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

            a = length - x - y - z

        print('第%d个字符串共有:英文字母 %d 个,数字 %d个,空格 %d 个,其他字符 %d个 ' % (n + 1, x, y, a, z))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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[i]:  # 循环参数内的字符串的字母
            if each in english:
                x += 1

            elif each in number:
                y += 1

            elif each in space:
                z += 1

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

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


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

使用道具 举报

发表于 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[i] in english:
                x += 1
           
            elif each[i] in number:
                y += 1

            elif each[i] in others:
                z += 1
            elif each[i] == ' ':
                a += 1


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

count('love123')
想知道小甲鱼最近在做啥?请访问 -> 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 感谢!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

你传入的是一堆字符串,所以
strs[i]
应该是一个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[i] in english:
                x += 1

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

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

            a = length - x - y - z

        print('第%d个字符串共有:英文字母 %d 个,数字 %d个,空格 %d 个,其他字符 %d个 ' % (n + 1, x, y, a, z))
想知道小甲鱼最近在做啥?请访问 -> 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有你更精彩^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

strs[i]
不是strs
[i]
坑了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

可你是这么说的
所以strs应该是一个str型的变量
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


是论坛自动把
[i]
识别成了标签,不信你在回复区打个
str[i]
试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

谢谢您了
但是还想请问,我认为这个 len(strs[i]) 不该是1吗,为什么是12呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

感谢感谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

好吧
想知道小甲鱼最近在做啥?请访问 -> 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 元组中
想知道小甲鱼最近在做啥?请访问 -> 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是得到元组
想知道小甲鱼最近在做啥?请访问 -> 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

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

举个例子就知道了:
nums = [1, 2, 3, 4, 5]
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
"""
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

好滴好滴,谢谢啦!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-20 01:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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