我正在学习如何使用python,昨天我遇到了一个问题,描述如下:
修改first_和_last函数,使其在字符串的第一个字母与最后一个字母相同时返回True,在不同时返回False
通过尝试解决这个问题,我发现有两个几乎相同的程序,但一个可以正确运行,另一个调用错误:字符串索引超出范围
程序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(""))
我只是想知道这两个程序之间的区别,以及为什么它们返回不同的结果。感谢你的帮助
因为
or
操作符通过检查第一个条件来工作,如果第一个条件不是真的,则检查第二个条件您的
or
的左侧为true(即len(message) == 0
),因此不会执行右侧(message[0] == message[-1]
)。因此,您不会得到范围异常如果交换顺序,
message[0] == message[-1]
位于运算符的左侧,因此执行时不检查字符串是否为空您将在本例中看到
您将获得
condition_1 executed
。如果将condition_1
更改为返回false,则将同时得到condition_1 executed
和condition_2 executed
这是因为您的第二个程序中出现了“IndexError:字符串索引超出范围”错误。第一个程序首先比较len(消息),并且已经有一个“True”。第二个程序首先比较第一个字符和最后一个字符。这就是问题所在
第一个程序工作的原因是,它首先检查消息的
len
是否为0,如果为True
,它会立即进入if语句,而第二个程序首先检查第一个字母是否等于最后一个字母,并且如果失败,空字符串没有索引0相关问题 更多 >
编程相关推荐