Python中关于if语句和空字符串的问题
我正在学习如何使用python,昨天我遇到了一个问题,描述如下: 修改first_和_last函数,使其在字符串的第一个字母与最后一个字母相同时返回True,在不同时返回False 通过尝试解决这个问题,我发现有两个几乎相同的程序,但一个可以正确运行,另一个调用错误:字符串索引超出范围 程序1(可以正确运行) 程序2(这称为错误)Python中关于if语句和空字符串的问题,python,string,if-statement,Python,String,If Statement,我正在学习如何使用python,昨天我遇到了一个问题,描述如下: 修改first_和_last函数,使其在字符串的第一个字母与最后一个字母相同时返回True,在不同时返回False 通过尝试解决这个问题,我发现有两个几乎相同的程序,但一个可以正确运行,另一个调用错误:字符串索引超出范围 程序1(可以正确运行) 程序2(这称为错误) 我只是想知道这两个程序之间的区别,以及为什么它们返回不同的结果。感谢你的帮助 这是因为您的第二个程序中出现了“索引器:字符串索引超出范围”错误。第一个程序首先比较le
我只是想知道这两个程序之间的区别,以及为什么它们返回不同的结果。感谢你的帮助 这是因为您的第二个程序中出现了“索引器:字符串索引超出范围”错误。第一个程序首先比较len(消息),并且已经有一个“True”。第二个程序首先比较第一个字符和最后一个字符。所以问题就出在这里。第一个程序工作的原因是,它首先检查消息的
len
是否为0,如果为True,它会立即进入if语句,而第二个程序首先检查第一个字母是否等于最后一个字母,因为如果失败,空字符串没有索引0。或“如果至少有一个条件为真,则语句为真。当左侧为”或“为true,右侧未执行,因此第二个程序中的空字符串有错误,但第一个程序中的空字符串没有错误,因为或运算符通过检查第一个条件来工作,如果第一个条件不为true,则检查第二个条件
您的或
的左侧为true(消息==0
),因此右侧不执行(消息[0]==message[-1]
)。因此,您不会得到范围异常
如果交换订单,message[0]==message[-1]
位于运算符的左侧,因此执行时不检查字符串是否为空
您将在本例中看到
def condition_1():
print('condition_1 executed')
return True
def condition_2():
print('condition_2 executed')
return True
if condition_1()or condition_2():
print('one condition is true')
您将执行条件\u 1
。如果将condition_1
更改为返回false,则执行condition_1
和condition_2
,如果字符串长度为0,则获取消息[0]
的值,即字符串的第一个字母,会给出索引超出范围的异常。字符串中没有这样的字符。您的第一个代码是正确的:检查以确保字符在查看其值之前退出。您的代码可以简化为只返回len(message)==0或message[0]==message[-1]
。您不需要if
语句。指定的功能假定字符串中有首字母和末字母。空字符串是违反先决条件的,或者需要修复规范。
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(""))
def condition_1():
print('condition_1 executed')
return True
def condition_2():
print('condition_2 executed')
return True
if condition_1()or condition_2():
print('one condition is true')