鱼C论坛

 找回密码
 立即注册
查看: 1703|回复: 9

[已解决]20课动动手第1题

[复制链接]
发表于 2020-8-31 15:42:32 | 显示全部楼层 |阅读模式

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

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

x
我写的代码是:
  1. def a():
  2.     text = input('请输入文本:')
  3.     if '\n' in text:
  4.         text_new = text.replace('\n','1')
  5.     symbols = r'~!@#$%^&*()_+{}|:"<>?`-=[]\;,./'
  6.     length = len(symbols)
  7.     for i in range(length):
  8.         b = text_new.count(symbols[i])
  9.         print(symbols[i],'有',b,'个')
复制代码

运行以后出错了,错误是
  1. Traceback (most recent call last):
  2.   File "<pyshell#20>", line 1, in <module>
  3.     a()
  4.   File "C:/Users/ciic/Desktop/111.py", line 8, in a
  5.     b = text_new.count(symbols[i])
  6. UnboundLocalError: local variable 'text_new' referenced before assignment
复制代码


这里没看明白错误提示,两个疑问:1.我只有一个函数,为什么会提示local variable?2.我已经定义过text_new了,为什么说没有定义?
最佳答案
2020-8-31 15:49:01
  1. def a():
  2.     text = input('请输入文本:')

  3.     text_new = text.replace('\n','1')
  4.     symbols = r'~!@#$%^&*()_+{}|:"<>?`-=[]\;,./'
  5.     length = len(symbols)
  6.     for i in range(length):
  7.         b = text_new.count(symbols[i])
  8.         print(symbols[i],'有',b,'个')
  9. a()
复制代码

因为input默认返回的是换行符之前的字符,if判断之后才定义text_new,不用判断换行符的存在
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-8-31 15:49:01 | 显示全部楼层    本楼为最佳答案   
  1. def a():
  2.     text = input('请输入文本:')

  3.     text_new = text.replace('\n','1')
  4.     symbols = r'~!@#$%^&*()_+{}|:"<>?`-=[]\;,./'
  5.     length = len(symbols)
  6.     for i in range(length):
  7.         b = text_new.count(symbols[i])
  8.         print(symbols[i],'有',b,'个')
  9. a()
复制代码

因为input默认返回的是换行符之前的字符,if判断之后才定义text_new,不用判断换行符的存在
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-31 15:51:17 | 显示全部楼层
1q23w31 发表于 2020-8-31 15:49
因为input默认返回的是换行符之前的字符,if判断之后才定义text_new,不用判断换行符的存在

能再解释一下吗?还是不太清楚
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-31 16:14:28 | 显示全部楼层
pejayang 发表于 2020-8-31 15:51
能再解释一下吗?还是不太清楚

https://fishc.com.cn/forum.php?m ... amp;highlight=input
看一下input的用法,末尾的换行符会被丢弃,所以text里面没有换行符,也就不需要判断是否存在且替换
所以会说你的text_new没定义
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-31 16:33:42 | 显示全部楼层
  1. def a():
  2.     text_new = input('请输入文本:')
  3.     symbols = r'~!@#$%^&*()_+{}|:"<>?`-=[]\;,./'
  4.     length = len(symbols)
  5.     for i in range(length):
  6.         b = text_new.count(symbols[i])
  7.         print(symbols[i],'有',b,'个')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-31 18:45:33 | 显示全部楼层
input获得的字符串是不可能含有'\n'的,因此第三行的if语句判断为假,所以没有定义变量 text_new,所以在第8行的时候使用 text_new 就出错了
直接把第3 、4行删掉,然后把第8行的的text_new改为text就可以了
  1. def a():
  2.     text = input('请输入文本:')
  3.     symbols = r'~!@#$%^&*()_+{}|:"<>?`-=[]\;,./'
  4.     length = len(symbols)
  5.     for i in range(length):
  6.         b = text.count(symbols[i])
  7.         print(symbols[i],'有',b,'个')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-31 19:52:56 | 显示全部楼层
没有考虑没替换字符的情况,这时候就没定义text_new
  1. def a():
  2.     text = input('请输入文本:')
  3.     if 'someString' in text:
  4.         text = text.replace('someString','1')
  5.     symbols = r'~!@#$%^&*()_+{}|:"<>?`-=[]\;,./'
  6.     length = len(symbols)
  7.     for i in range(length):
  8.         b = text.count(symbols[i])
  9.         print(symbols[i],'有',b,'个')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-1 08:55:33 | 显示全部楼层
sunrise085 发表于 2020-8-31 18:45
input获得的字符串是不可能含有'\n'的,因此第三行的if语句判断为假,所以没有定义变量 text_new,所以在第 ...

我一开始是这样写的代码,运行以后发现代码只会统计第一段字符串里,结果是这样的:
  1. ~ 有 0 个
  2. ! 有 5 个
  3. @ 有 8 个
  4. # 有 3 个
  5. $ 有 6 个
  6. % 有 7 个
  7. ^ 有 6 个
  8. & 有 4 个
  9. * 有 4 个
  10. ( 有 2 个
  11. ) 有 4 个
  12. _ 有 10 个
  13. + 有 4 个
  14. { 有 3 个
  15. } 有 6 个
  16. | 有 0 个
  17. : 有 0 个
  18. " 有 0 个
  19. < 有 0 个
  20. > 有 0 个
  21. ? 有 0 个
  22. ` 有 0 个
  23. - 有 0 个
  24. = 有 0 个
  25. [ 有 4 个
  26. ] 有 4 个
  27. \ 有 0 个
  28. ; 有 0 个
  29. , 有 0 个
  30. . 有 0 个
  31. / 有 0 个
复制代码


所以我才加入了判断折行的代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-1 10:42:40 | 显示全部楼层
pejayang 发表于 2020-9-1 08:55
我一开始是这样写的代码,运行以后发现代码只会统计第一段字符串里,结果是这样的:

什么叫只会统计第一段字符串?
你程序中用的是input进行字符串输入,那么你输入一串字符之后敲回车就结束输入了。什么叫第一段字符串?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-1 14:50:31 | 显示全部楼层
那我该怎么用这段代码统计所有文本中出现的符号数量呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-26 13:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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