Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中关于if语句和空字符串的问题_Python_String_If Statement - Fatal编程技术网

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

Python中关于if语句和空字符串的问题,python,string,if-statement,Python,String,If Statement,我正在学习如何使用python,昨天我遇到了一个问题,描述如下: 修改first_和_last函数,使其在字符串的第一个字母与最后一个字母相同时返回True,在不同时返回False 通过尝试解决这个问题,我发现有两个几乎相同的程序,但一个可以正确运行,另一个调用错误:字符串索引超出范围 程序1(可以正确运行) 程序2(这称为错误) 我只是想知道这两个程序之间的区别,以及为什么它们返回不同的结果。感谢你的帮助 这是因为您的第二个程序中出现了“索引器:字符串索引超出范围”错误。第一个程序首先比较le

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

修改first_和_last函数,使其在字符串的第一个字母与最后一个字母相同时返回True,在不同时返回False

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

程序1(可以正确运行)

程序2(这称为错误)


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

这是因为您的第二个程序中出现了“索引器:字符串索引超出范围”错误。第一个程序首先比较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')