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

2023-06-23 368 0

能否详细的说一下为什么这里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可能未定义 传入会报错。

回答

相关文章

nuxt2部署静态化和ssr的时候访问首页先报404再出现首页为什么?
`clip-path` 如何绘制圆角平行四边形呢?
多线程wait方法报错?
VUE 绑定的方法如何直接使用外部函数?
vue2固定定位该怎么做?
谁有redis实现信号量的代码,希望借鉴一下?