当前位置: 首页 > 知识库问答 >
问题:

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

郭阳泽
2023-06-19

能否详细的说一下为什么这里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

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

共有3个答案

吕向荣
2023-06-19

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

夹谷信鸿
2023-06-19
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还会报错

陶智
2023-06-19

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

 类似资料:
  • 我制作了这个简单的GUI程序,它可以计算特定字符序列的元音和辅音。计数器还可以,但是我对if-else语句有一个问题,当那个字符既不是元音也不是辅音时,我必须显示一条消息...代码如下: 它看起来是这样的: 我输入了一个没有任何特殊字符或数字的字符“序列”。但它仍然显示消息,其中它有元音和辅音以外的其他字符。if-else语句有问题吗?感谢您的帮助:)

  • 问题内容: 我从节点启动这是来自node.js README.md 先决条件(仅Unix): 想知道为什么node.js需要Python?它是否在其API下使用Python 问题答案: Node.js使用GYP构建-GYP —用Python编写的跨平台构建工具。Python中还实现了其他一些构建步骤。因此,从源代码构建节点需要Python。 但是您还需要Python来构建本机插件。

  • 问题内容: 我不知道为什么我们需要在报表。我认为,此代码块 使用以下命令与此相同: 我想念什么吗? 问题答案: 如果您提早返回,将会有所不同: 比较一下: 可能导致差异的其他情况: 如果在except块内引发异常。 如果引发异常,但不是。 其他控制流语句,例如和语句。

  • 问题内容: 谁能看到为什么此开关不起作用? 在此语句中,始终返回默认值,但是在对switch表达式进行硬编码时,switch块会按预期工作。查看ReadString()函数代码,它返回一个字符串,因此我看不到任何原因导致我的示例不起作用。 难道我做错了什么?! 问题答案: 您的文本包含两个字节:是2和是1。 您第二个符号是不可见的,您可以尝试使用将其删除。

  • 首先,我发现了另外两条有类似问题的线索。问题在于,他们没有为字符串使用正确的等号,也没有为他们的特定问题正确设置if语句的格式。 在我的任务中,我需要创建一个名为“猪”的游戏,玩家与计算机对决,在掷骰子时先获得100分。如果玩家在一个回合中掷1,他们不会得到额外的分数。如果玩家掷两个1,那么他们将失去所有分数。我还没有对电脑的回合进行编码,只是专注于玩家。请告诉我我做错了什么。提前非常感谢。 我的

  • 在模块声明中,requires和requires可传递模块语句之间有什么区别 例如: