请问为什么这里else语句需要添加?
能否详细的说一下为什么这里else语句不写就会存在非零返回的问题吗?
题目:
7-23 词组缩写
定义:一个词组中每个单词的首字母的大写组合称为该词组的缩写。 WHO就是World Health Organization的缩写。
输入测试数据占一行,有一个词组,每个词组由一个或多个单词组成;每组的单词个数不超过10个,每个单词有一个或多个大写或小写字母组成; 单词长度不超过10,由一个或多个空格分隔这些单词。
输出缩写
假设输入的是hello world
输出应该是HW,实际上第一个代码我在idle里输出也是HW,可是总是非零返回,第二个代码就不会
下面第一个是我的代码,第二个是改进过后正确的代码。我想请问一下这个else后面的语句为什么一定要写?我的理解是因为只要第一个if语句不满足,那么就满足str(i[0]).isupper()的条件,直接print就好了内>< 是否有重新赋值的问题在?这个又该怎么理解?谢谢大家(爱心)
相关代码
n = input().split()
for i in n:
if str(i[0]).islower():
a = str(i[0])
a = a.upper()
print(a,end='')
n = input().split()
for i in n:
if str(i[0]).islower():
a = str(i[0])
a = a.upper()
else:
a = str(i[0])#我觉得这里可以不写呀~。~
print(a, end='')
输入: hello world. 输出:HW
实际上第一个第二个在电脑上运行结果一样@.@
回复
1个回答

test
2024-07-01
因为你想去掉else的写法会存在bug,当你输入的单词存在大写字母开头的时候,就会报错,a未被定义:那是因为这时候你的a是在if语句内定义的局部变量,print则是在for下,a变量无法在for下直接被访问到,所以会报错。改成下面这种就可以了。
n = input().split()
for i in n:
a = str(i[0])
if a.islower():
a = a.upper()
print(a, end='')
这里面有一个知识点,python作用域下变量的L-E-G-B解析顺序。
- L - Local
- E - Enclosing function
- G - Global
- B - Built-in
python会在当前函数域内按照上面的顺序去查找变量。这个变量解析资料很多,贴一个助理解: Python中的LEGB规则
回复

适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容