知行编程网知行编程网  2022-11-25 14:30 知行编程网 隐藏边栏  5 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于Python if else条件语句详解的相关知识,包括if if else语句格式,以及条件语句if这些编程知识,希望对大家有参考作用。

Python if else条件语句详解

if分支使用布尔表达式或布尔值作为分支条件进行分支控制。 Python 的 if 分支既可以用作语句,也可以用作表达式。下面先介绍if分支作为语句的情况。

if 语句可以使用任何表达式作为分支条件进行分支控制。 Python的if语句有以下三种形式:

第一种形式:

if expression:
    statements...

第二种形式:

if expression
    statements...
else:
    statements...

第三种形式:

if expression:
    statements...
elif expression:
    statements...
...//可以有零条或多条elif语句
else:
    statement...

在上面 if 语句的三种形式中,第二种形式和第三种形式是相通的,如果第三种形式中的 elif 块不出现,则变成了第二种形式。

对于上面的 if 分支语句,执行过程是非常简单的,即如果 if 条件为“真”,程序就会执行 if 条件后面的多条语句;否则就会依次判断 elif 条件,如果 elif 条件为“真”,程序就会执行 elif 条件后面的多条语句……如果前面所有条件都为“假”,程序就会执行 else 后的代码块(如果有)。

在上面的条件语句中,if expression:、elif expression:及 else:后缩进的多行代码被称为代码块,一个代码块通常被当成一个整体来执行(除非在运行过程中遇到return、break、continue等关键字),因此这个代码块也被称为条件执行体。

Python是一门很“独特”的语言,它的代码块是通过缩进来标记的(大部分语言都使用花括号或 end 作为代码块的标记),具有相同缩进的多行代码属于同一个代码块。如果代码莫名其妙地乱缩进,Python 解释器会报错(前文说过,Python 不是格式自由的语言)。

例如如下程序:

s_age = input("请输入你的年龄:")
age = int(s_age)
if age > 20 :
    # 只有当age > 20时,下面用整体缩进的代码块才会执行
    # 整体缩进的语句是一个整体,要么一起执行,要么一起不执行
    print("年龄已经大于20岁了")
    print("20岁以上的人应该学会承担责任...")

运行上面的代码,如果输入的age小于20,你会看到如下结果:

请输入你的年龄:18


从上面的代码可以看出,如果输入的age小于20,程序就没有输出,整体缩进的语句也不会整体执行。

运行上面的代码,如果输入的age大于20,你会看到如下结果:

请输入你的年龄:24
年龄已经大于20岁了
20岁以上的人应该学会承担责任...

从上面的代码可以看出,如果输入的age大于20,程序会执行整体缩进的代码块。

代码块必须缩进,否则不是代码块。例如,下面的程序:

s_age = input("请输入你的年龄:")
age = int(s_age)
if age > 20 :
print("年龄已经大于20岁了")

上面程序的if条件和下面的print语句在同一竖线上,这样if条件下就没有受控代码块了。所以执行上面的程序会报如下错误:

IndentationError: expected an indented block

if条件后的条件执行体必须缩进。只有缩进代码才能被视为条件执行体。

接下来,读者会有一个疑问:代码块(条件执行体)应该缩进多少?这是可选的。你可以缩进 1 个空格、2 个空格、3 个空格……或 1 个制表符,这是符合语法的。但是从编程习惯的角度来看,Python 通常建议缩进 4 个空格。

有时,Python解释器不会报错,但并不代表程序没有错误。例如下面的代码:

s_age = input("请输入你的年龄:")
age = int(s_age)
if age > 20 :
    print("年龄已经大于20岁了")
print("20岁以上的人应该学会承担责任...")

解释并执行上面的程序,程序不会报错。但是,如果你输入的年龄小于 20 岁,你将看到以下内容:



请输入你的年龄:12
20岁以上的人要学会承担责任...


从运行过程可以看出,我们输入的年龄明显小于20,但是运行结果还是会打印“20岁以上……”。为什么是这样?这是因为 print 语句没有缩进。如果这行代码没有缩进,那么Python就不会把这行代码当作一个条件执行体,它不会被if条件控制,所以无论用户进入什么年龄段,print语句都会一直执行。

如果我们忘记正确缩进,很可能导致程序运行超出我们的预期。例如,下面的程序:

#定义变量b,并为其赋值
b = 5
if b > 4 :
    #如果b>4,则执行下面的条件执行体,只有一行代码作为代码块
    print("b大于4")
else:
    #否则,执行下面的条件执行体,只有一行代码作为代码块
    b -= 1
#对于下面代码而言,它己经不再是条件执行体的一部分,因此总会执行
print("b不大于4")

上面代码中,最后一行代码会一直执行,因为这行代码没有缩进,所以不属于else之后的条件执行体,else之后的条件执行体只是这行代码b -= 1。

如果你想让print("b is not greater than 4")语句也受else控制,你也需要将这行代码缩进4个空格。

if、else、elif之后的条件执行体必须使用一个缩进相同的代码块,并将这个代码块作为一个整体作为一个条件执行体。当if后面有多个语句作为条件执行体时,如果忘记缩进一行代码,就会导致语法错误。看下面的代码:

# 定义变量c,并为其赋值
c = 5
if c > 4:
    # 如果c>4,则执行下面的执行体,将只有c--一行代码为执行体
    c -= 1
# 下面是一行普通代码,不属于执行体
print("c大于4")
# 此处的else将没有if语句,因此编译出错
else
    # 否则,执行下面的执行体,只有一行代码作为代码块
    print("c不大于4")

上面代码中,由于if后面的条件执行体的最后一条语句没有缩进,所以系统只把c-=1这行代码作为条件执行体。 c-=1语句执行时,if语句也执行结束。下面的print("c is greater than 4")已经是一行普通代码,不再属于条件执行体,导致else语句没有if语句,导致编译错误。

运行上面代码,将看到如下错误:

SyntaxError : invalid syntax


不要随意缩进

需要注意的是,虽然Python语法允许代码块随意缩进N个空格,但同一代码块中的代码必须保持相同的缩进,不能缩进2个空格和4个空格。

例如如下代码:

s_age = input("请输入你的年龄:")
age = int(s_age)
if age > 20 :
    print("年龄已经大于20岁了")
     print("20岁以上的人应该学会承担责任...")

上面程序中的第二个 print 语句缩进了 5 个空格。在这种情况下,Python 解释器认为这条语句与前面的语句(缩进 4 个空格)不是同一个代码块(这是游标卡尺笑话的由来),因此 Python 解释器会报错。运行上面的代码会报如下错误:

IndentationError : unexpected indent

把代码改为如下形式:

s_age = input("请输入你的年龄:")
age = int(s_age)
if age > 20 :
    print("年龄已经大于20岁了")
   print("20岁以上的人应该学会承担责任...")

上面程序中的第二条打印语句只缩进了3个空格,与前面的打印语句(缩进4个空格)不属于同一个代码块,所以Python解释器还是会报错。运行上面的代码会报如下错误:


IndentationError: unindent does not match any outer indentation level

从上面的介绍可以看出,一个Python代码块中的所有语句都必须保持相同的缩进,不能多也不能少。


不要遗忘冒号

从 Python 语法解释器的角度来看,Python 冒号准确地指示了代码块的起点。这个函数不仅在条件执行体中为真,后面的循环体、方法体、类体都遵循这个规则。

如果程序忘记了冒号,Python 解释器将无法识别代码块的开头。例如,下面的程序:

age = 24
if age > 20
    print("年龄已经大于20岁了")
    print("20岁以上的人应该学会承担责任...")

上面 if 条件后忘了写冒号,因此 Python 就不知道条件执行体的开始点。运行上面程序,将会报出如下错误:

SyntaxError : invalid syntax



if 条件的类型

从前面的例子可以看出,Python 在执行 if 语句时,会判断 if 条件是 True 还是 False。那么if条件是否只能使用bool类型的表达式呢?

不。 if 条件可以是任何类型。当以下值用作 bool 表达式时,解释器会将其视为 False:

False、None、0、""、()、[]、{}

从上面的介绍可以看出,除了False本身,各种代表“空”的None、空字符串、空元组、空列表、空字典都会被当作False处理。

例如如下代码:

s = ""
if s :
    print('s不是空字符串')
else:
    print('s是空字符串')
# 定义空列表
my_list = []
if my_list:
    print('my_list不是空列表')
else:
    print('my_list是空列表')
# 定义空字典
my_dict = {}
if my_dict:
    print('my_dict不是空字典')
else:
    print('my_dict是空字典')

从上面的粗体代码可以看出,这些if条件分别使用了str类型、list类型和dict类型。由于这些str、list、dict都是空值,Python会把它们当作False。

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享