马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 hikaru2015 于 2017-4-9 20:39 编辑
#求一个列表中各个字符串分别包含的数字,字母和特殊符号数量,下面三个其实都是一个函数和同一个参数(以 kk = ['sdf3','fg45','fg@3'] 为例),只是开头的参数录入方式不同,造成了三个不同的输出结果,是什么原因?
def count(*param):
symbols = r'''`!@#$%^&*()_+-=/*{}[]\|'";:/?,.<>'''
chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
nums = '0123456789'
n = 0 #数字
c = 0 #字母
s = 0 # 特殊符号
ss = 0 # 空格
for each in param:
for each1 in each:
if each1 in chars:
c += 1
elif each1 in nums:
n += 1
elif each1 ==' ':
ss +=1
elif each1 in symbols:
s +=1
print(n,c,ss)
返回结果 :
>>> count(kk)
0 0 0
但如果改为这样:kk = ['sdf3','fg45','fg@3']
symbols = r'''`!@#$%^&*()_+-=/*{}[]\|'";:/?,.<>'''
chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
nums = '0123456789'
n = 0 #数字
c = 0 #字母
s = 0 # 特殊符号
ss = 0 # 空格
for each in kk:
for each1 in each:
if each1 in chars:
c += 1
elif each1 in nums:
n += 1
elif each1 ==' ':
ss +=1
elif each1 in symbols:
s +=1
print(n,c,ss)
则可以正常显示:
1 3 0
3 5 0
4 7 0
如果将程序改为temp = input('请输入一个列表')
symbols = r'''`!@#$%^&*()_+-=/*{}[]\|'";:/?,.<>'''
chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
nums = '0123456789'
n = 0 #数字
c = 0 #字母
s = 0 # 特殊符号
ss = 0 # 空格
for each in temp:
for each1 in each:
if each1 in chars:
c += 1
elif each1 in nums:
n += 1
elif each1 ==' ':
ss +=1
elif each1 in symbols:
s +=1
print(n,c,ss)
输出结果:
请输入一个列表['sdf3','fg45','fg@3']
0 0 0
0 0 0
0 1 0
0 2 0
0 3 0
1 3 0
1 3 0
1 3 0
1 3 0
1 4 0
1 5 0
2 5 0
3 5 0
3 5 0
3 5 0
3 5 0
3 6 0
3 7 0
3 7 0
4 7 0
4 7 0
4 7 0
为何同一个函数,参数输入方式不同,得到的结果大相径庭呢?
你第一份代码在定义count函数参数时使用了*,导致你传进来的param把你的整个列表参数当做一个参数组成一个元组,for each in param 的each的值只会是一个,就是你的列表['sdf3','fg45','fg@3'],后边的each1每个就是列表中的每个值,导致比较结果最终是0 0 0
第二和第三份代码的区别在于你用了input输入整个列表,但是你没有转换成列表类型,python3中input的返回的都是字符串类型,相当于你的temp的值是r'['sdf3','fg45','fg@3']'这样,所以你的循环统计就是每个字符,包括了'和[,但是你的输出没有特殊符号,所以没有体现出来
|