Python中if语句和空字符串的问题

我正在学习如何使用python,昨天我得到了一个问题,描述如下:


修改first_and_last函数,如果字符串的第一个字母与最后一个字母相同则返回True,如果不同则返回False。


通过尝试解决这个问题,我发现有2个几乎相同的程序,但一个可以正确运行,另一个调用错误:字符串索引超出范围


程序1(可以正确运行)


def first_and_last(message):

    if len(message) == 0 or message[0] == message[-1]:

        return True

    else:

        return False


print(first_and_last("else"))

print(first_and_last("tree"))

print(first_and_last(""))

程序 2(这会引发错误)


def first_and_last(message):

    if message[0] == message[-1] or len(message) == 0:

        return True

    else:

        return False


print(first_and_last("else"))

print(first_and_last("tree"))

print(first_and_last(""))

我只想知道这两个程序有什么区别,以及为什么它们返回不同的结果。感谢您的帮助!


当年话下
浏览 75回答 5
5回答

holdtom

因为or运算符通过检查第一个条件来工作,如果第一个条件不为真,则检查第二个条件。你的左边or是真的(len(message) == 0),所以右边不被执行(message[0] == message[-1])。因此,您不会得到范围异常。如果交换顺序,message[0] == message[-1]位于运算符的左侧,因此执行时不会检查字符串是否为空。您将在此示例中看到def condition_1():    print('condition_1 executed')    return Truedef condition_2():    print('condition_2 executed')    return Trueif condition_1()or condition_2():    print('one condition is true')你会得到condition_1 executed。如果更改condition_1 为 return false,您将同时得到condition_1 executed和condition_2 executed。

Cats萌萌

第一个程序工作的原因是它首先检查len消息的 0 是否为 0,如果是,True则立即进入 if 语句,而第二个程序首先检查第一个字母是否等于最后一个字母,并且由于空字符串如果失败则没有索引 0。

慕标琳琳

最近,当我浏览cs61a时,我在课程网站上发现了一些非常有用的信息,我决定涵盖重要部分并将链接放在这里,供其他可能提出这个问题的人作为参考。这个问题基本上是由Python处理表达式的顺序引起的,即Short Circuiting。例如,当您在 Python 中键入以下内容时:1 / 0 or True我们会得到 a ZeroDivisionError,因为 1 除以 0 在数学中是无效的。听起来很合理,对吧?但是运行这段代码我们会得到什么呢?True or 1 / 0True既然它只是交换了和 的顺序1 / 0,也许我们会得到相同的结果?答案是否定的,运行代码后,我们得到了True相反的结果,这就是短路的工作原理!当运算符到达允许他们对表达式做出结论的操作数时,就会发生短路。在这种情况下,or一旦到达第一个真值就会短路,因为它知道至少有一个值是真而不执行1 / 0(尽管它是无效的)。同样,and当第一个值为 false 时会短路,因为它知道并非所有值都是 true。这是备忘单:操作员支票从左到右评估和如果所有值都是 true第一个假值或者如果至少有一个值为 true第一个真实值

慕桂英546537

这是因为第二个程序中出现“IndexError:字符串索引超出范围”错误。第一个程序首先比较 len(message) 并且已经有一个“True”。虽然您的第二个程序首先将第一个字符与最后一个字符进行比较。所以这个问题。

精慕HU

如果至少一个条件为真,“或”语句为 True。当“or”的左侧为 true 时,右侧不会执行,因此第二个程序中出现空字符串错误,但第一个程序中的空字符串没有错误
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python