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: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 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') qiuyouzhi 发表于 2020-7-9 13:12
strs是一个可变参数,返回值是一个元组,用len(strs)返回值是元组的长度,而不是元组内元素的长度。
改成 ...
你的代码输入其他字符也会统计并显示为空格的数量 本帖最后由 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)) lhgzbxhz 发表于 2020-7-9 13:16
你传入的是一堆字符串,所以strs应该是一个str型的变量,怎么还用in呢?
应该这样:
看来你学的不够扎实啊
由于strs是一个可变参数,所以会被打包成元组类型,不是字符串类型。
本帖最后由 lhgzbxhz 于 2020-7-9 14:29 编辑
qiuyouzhi 发表于 2020-7-9 14:13
看来你学的不够扎实啊
由于strs是一个可变参数,所以会被打包成元组类型,不是字符串类型。
是strs不是strs
被坑了 lhgzbxhz 发表于 2020-7-9 14:28
是不是strs
被坑了
可你是这么说的
所以strs应该是一个str型的变量 qiuyouzhi 发表于 2020-7-9 14:30
可你是这么说的
是论坛自动把识别成了标签,不信你在回复区打个str试试 Twilight6 发表于 2020-7-9 13:11
改成这样即可,原因看注释吧:
谢谢您了{:10_266:}
但是还想请问,我认为这个 len(strs) 不该是1吗,为什么是12呢{:10_272:} qiuyouzhi 发表于 2020-7-9 13:12
strs是一个可变参数,返回值是一个元组,用len(strs)返回值是元组的长度,而不是元组内元素的长度。
改成 ...
感谢感谢!{:10_323:} lhgzbxhz 发表于 2020-7-9 14:32
是论坛自动把识别成了标签,不信你在回复区打个试试
好吧 倪劳资 发表于 2020-7-9 15:58
谢谢您了
但是还想请问,我认为这个 len(strs) 不该是1吗,为什么是12呢
因为 strs 是你设置的传入的参数,所以当你传入一个字符串参数时候 len (strs) 就等于 1
当你传入两个字符串的时候 len(strs) 就等于 2
*strs 就是可以接收不定量参数用的,将你全部填入的参数都保留在 strs 元组中
lhgzbxhz 发表于 2020-7-9 13:16
你传入的是一堆字符串,所以strs应该是一个str型的变量,怎么还用in呢?
应该这样:
谢谢辽{:10_323:}
但我还想请问一下, for n,s in enumerate(strs) 中,这个n是什么作用呢{:10_272:},s是得到元组 Twilight6 发表于 2020-7-9 16:00
因为 strs 是你设置的传入的参数,所以当你传入一个字符串参数时候 len (strs) 就等于 1
当你传入两 ...
okk,谢谢您了{:10_323:} 倪劳资 发表于 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
"""
lhgzbxhz 发表于 2020-7-9 16:46
举个例子就知道了:
好滴好滴,谢谢啦!{:5_106:}
页:
[1]