鱼C论坛

 找回密码
 立即注册
查看: 1658|回复: 6

[已解决]关于程序异常的问题

[复制链接]
发表于 2017-4-9 20:31:36 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 hikaru2015 于 2017-4-9 20:39 编辑

#求一个列表中各个字符串分别包含的数字,字母和特殊符号数量,下面三个其实都是一个函数和同一个参数(以 kk = ['sdf3','fg45','fg@3'] 为例),只是开头的参数录入方式不同,造成了三个不同的输出结果,是什么原因?

  1. def count(*param):
  2.     symbols = r'''`!@#$%^&*()_+-=/*{}[]\|'";:/?,.<>'''
  3.     chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
  4.     nums = '0123456789'
  5.     n = 0 #数字
  6.     c = 0 #字母
  7.     s = 0 # 特殊符号
  8.     ss = 0 # 空格
  9.     for each in param:
  10.             for each1 in each:
  11.                     if each1 in chars:
  12.                             c += 1
  13.                     elif each1 in nums:
  14.                             n += 1
  15.                     elif each1 ==' ':
  16.                             ss +=1
  17.                     elif each1 in symbols:
  18.                             s +=1
  19.                 print(n,c,ss)
复制代码


返回结果 :
>>> count(kk)
         0 0 0


但如果改为这样:
  1. kk = ['sdf3','fg45','fg@3']
  2. symbols = r'''`!@#$%^&*()_+-=/*{}[]\|'";:/?,.<>'''
  3. chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
  4. nums = '0123456789'
  5. n = 0 #数字
  6. c = 0 #字母
  7. s = 0 # 特殊符号
  8. ss = 0 # 空格
  9. for each in kk:
  10.         for each1 in each:
  11.                 if each1 in chars:
  12.                         c += 1
  13.                 elif each1 in nums:
  14.                         n += 1
  15.                 elif each1 ==' ':
  16.                         ss +=1
  17.                 elif each1 in symbols:
  18.                         s +=1               
  19.         print(n,c,ss)
复制代码


则可以正常显示:
1 3 0
3 5 0
4 7 0


如果将程序改为
  1. temp = input('请输入一个列表')
  2. symbols = r'''`!@#$%^&*()_+-=/*{}[]\|'";:/?,.<>'''
  3. chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
  4. nums = '0123456789'
  5. n = 0 #数字
  6. c = 0 #字母
  7. s = 0 # 特殊符号
  8. ss = 0 # 空格
  9. for each in temp:
  10.         for each1 in each:
  11.                 if each1 in chars:
  12.                         c += 1
  13.                 elif each1 in nums:
  14.                         n += 1
  15.                 elif each1 ==' ':
  16.                         ss +=1
  17.                 elif each1 in symbols:
  18.                         s +=1               
  19.         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


为何同一个函数,参数输入方式不同,得到的结果大相径庭呢?
最佳答案
2017-4-10 09:39:42
你第一份代码在定义count函数参数时使用了*,导致你传进来的param把你的整个列表参数当做一个参数组成一个元组,for each in param 的each的值只会是一个,就是你的列表['sdf3','fg45','fg@3'],后边的each1每个就是列表中的每个值,导致比较结果最终是0 0 0
第二和第三份代码的区别在于你用了input输入整个列表,但是你没有转换成列表类型,python3中input的返回的都是字符串类型,相当于你的temp的值是r'['sdf3','fg45','fg@3']'这样,所以你的循环统计就是每个字符,包括了'和[,但是你的输出没有特殊符号,所以没有体现出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-4-9 20:44:22 | 显示全部楼层
@冬雪雪冬 @lumber2388779 @ooxx7788 @gopythoner
召唤术~
为什么...好神奇~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-9 22:25:16 | 显示全部楼层
把第一行改为:
def count(param):
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-10 09:14:38 | 显示全部楼层
冬雪雪冬 发表于 2017-4-9 22:25
把第一行改为:
def count(param):

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

使用道具 举报

发表于 2017-4-10 09:18:51 | 显示全部楼层

我试了是可以的。
1.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-10 09:39:42 | 显示全部楼层    本楼为最佳答案   
你第一份代码在定义count函数参数时使用了*,导致你传进来的param把你的整个列表参数当做一个参数组成一个元组,for each in param 的each的值只会是一个,就是你的列表['sdf3','fg45','fg@3'],后边的each1每个就是列表中的每个值,导致比较结果最终是0 0 0
第二和第三份代码的区别在于你用了input输入整个列表,但是你没有转换成列表类型,python3中input的返回的都是字符串类型,相当于你的temp的值是r'['sdf3','fg45','fg@3']'这样,所以你的循环统计就是每个字符,包括了'和[,但是你的输出没有特殊符号,所以没有体现出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-10 10:18:31 | 显示全部楼层

我那个程序退格有点错误,修改后可以了,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-22 18:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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