pejayang 发表于 2020-8-31 15:42:32

20课动动手第1题

我写的代码是:
def a():
    text = input('请输入文本:')
    if '\n' in text:
      text_new = text.replace('\n','1')
    symbols = r'~!@#$%^&*()_+{}|:"<>?`-=[]\;,./'
    length = len(symbols)
    for i in range(length):
      b = text_new.count(symbols)
      print(symbols,'有',b,'个')
运行以后出错了,错误是
Traceback (most recent call last):
File "<pyshell#20>", line 1, in <module>
    a()
File "C:/Users/ciic/Desktop/111.py", line 8, in a
    b = text_new.count(symbols)
UnboundLocalError: local variable 'text_new' referenced before assignment

这里没看明白错误提示,两个疑问:1.我只有一个函数,为什么会提示local variable?2.我已经定义过text_new了,为什么说没有定义?

1q23w31 发表于 2020-8-31 15:49:01

def a():
    text = input('请输入文本:')

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

因为input默认返回的是换行符之前的字符,if判断之后才定义text_new,不用判断换行符的存在

pejayang 发表于 2020-8-31 15:51:17

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

能再解释一下吗?还是不太清楚

1q23w31 发表于 2020-8-31 16:14:28

pejayang 发表于 2020-8-31 15:51
能再解释一下吗?还是不太清楚

https://fishc.com.cn/forum.php?mod=viewthread&tid=142732&highlight=input
看一下input的用法,末尾的换行符会被丢弃,所以text里面没有换行符,也就不需要判断是否存在且替换
所以会说你的text_new没定义

永恒的蓝色梦想 发表于 2020-8-31 16:33:42

def a():
    text_new = input('请输入文本:')
    symbols = r'~!@#$%^&*()_+{}|:"<>?`-=[]\;,./'
    length = len(symbols)
    for i in range(length):
      b = text_new.count(symbols)
      print(symbols,'有',b,'个')

sunrise085 发表于 2020-8-31 18:45:33

input获得的字符串是不可能含有'\n'的,因此第三行的if语句判断为假,所以没有定义变量 text_new,所以在第8行的时候使用 text_new 就出错了
直接把第3 、4行删掉,然后把第8行的的text_new改为text就可以了
def a():
    text = input('请输入文本:')
    symbols = r'~!@#$%^&*()_+{}|:"<>?`-=[]\;,./'
    length = len(symbols)
    for i in range(length):
      b = text.count(symbols)
      print(symbols,'有',b,'个')

12characters 发表于 2020-8-31 19:52:56

没有考虑没替换字符的情况,这时候就没定义text_new
def a():
    text = input('请输入文本:')
    if 'someString' in text:
      text = text.replace('someString','1')
    symbols = r'~!@#$%^&*()_+{}|:"<>?`-=[]\;,./'
    length = len(symbols)
    for i in range(length):
      b = text.count(symbols)
      print(symbols,'有',b,'个')

pejayang 发表于 2020-9-1 08:55:33

sunrise085 发表于 2020-8-31 18:45
input获得的字符串是不可能含有'\n'的,因此第三行的if语句判断为假,所以没有定义变量 text_new,所以在第 ...

我一开始是这样写的代码,运行以后发现代码只会统计第一段字符串里,结果是这样的:
~ 有 0 个
! 有 5 个
@ 有 8 个
# 有 3 个
$ 有 6 个
% 有 7 个
^ 有 6 个
& 有 4 个
* 有 4 个
( 有 2 个
) 有 4 个
_ 有 10 个
+ 有 4 个
{ 有 3 个
} 有 6 个
| 有 0 个
: 有 0 个
" 有 0 个
< 有 0 个
> 有 0 个
? 有 0 个
` 有 0 个
- 有 0 个
= 有 0 个
[ 有 4 个
] 有 4 个
\ 有 0 个
; 有 0 个
, 有 0 个
. 有 0 个
/ 有 0 个

所以我才加入了判断折行的代码

sunrise085 发表于 2020-9-1 10:42:40

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




什么叫只会统计第一段字符串?
你程序中用的是input进行字符串输入,那么你输入一串字符之后敲回车就结束输入了。什么叫第一段字符串?

pejayang 发表于 2020-9-1 14:50:31

那我该怎么用这段代码统计所有文本中出现的符号数量呢?
页: [1]
查看完整版本: 20课动动手第1题