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

请问为什么这里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

实际上第一个第二个在电脑上运行结果一样@.@


回答:

因为你想去掉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规则


回答:

if str(i[0]).islower():

a = str(i[0]) # 这里赋值两次就已经是重新赋值了

a = a.upper()

if str(i[0]).islower():

print(str(i[0]).upper(), end='')

直接在if里面print就好了,不然的话进不去if也没有else的话,print找不到a还会报错


回答:

很经典 py没有声明语句是这样的。
没有else a可能未定义 传入会报错。

以上是 请问为什么这里else语句需要添加? 的全部内容, 来源链接: utcz.com/p/938919.html

回到顶部