请问为什么这里else语句需要添加?

作者站长头像
站长
· 阅读数 12

能否详细的说一下为什么这里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个回答
avatar
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规则

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