《Python编程思想》总目录
上一篇:Python编程思想(8):使用字典
目录
1. if语句基础
2. 由于缩进错误引发的血案
3. if条件的类型
4. pass语句
if语句用于进行条件判断,可以使用布尔表达式或布尔值作为分支条件判断。Python语言的if语句既可以作为普通语句使用,也可以作为表达式使用。下面先介绍if语句作为普通语句使用的方法。
Python语言的ifi语句有如下3种形式。
第1种形式:
if expression:
statements...
第2种形式:
if expression:
statements...
else:
statements...
第3种形式:
if expression:
statements
elif expression1: # 可以有任意多个elif语句
statements1...
elif expression2:
statements2...
else:
statements...
在上面if语句的3种形式中,第2种形式和第3种形式类似的,如果第2种形式中的elif子句不出现,则变成了第2种形式。也就是说,第3种形式其实是第2种形式的特例。
对于上面的if语句,会按下面的过程执行:
1. 如果if条件为True,程序就会执行if条件后面的多条语句;
2. 如果if条件为False,就会依次判断elif条件,如果某一个elif条件为True,程序就会执行该elif条件后面的多条语句;
3. 如果前面所有条件都为False,程序就会执行else子句中的所有代码(如果有else子句的话);
要注意的是,在if语句中, if expression:、 elif expression:和else:后面缩进的多行代码被称为代码块,一个代码块会被当做一个整体来执行,除非遇到了return、break、continue等语句,会终止代码块后面语句的执行。
在使用Python语言时要注意,Python语言中的所有语句(包括条件、循环等)都使用缩进来标记代码块,而大多数编程语言都是用一对花括号来标记代码块。所以在使用Python时一定要注意缩进,缩进一旦乱了,就不容易调回原貌了。所以说,Python语言尽管强大,但Python语言本身并不是一种格式自由的语言。
下面看一个典型的if语句案例:if语句基础.py
name = input("请输入你的名字:")
if name == "Bill" :
# 只有在name等于Bill时,才会执行下面两条语句
# 这两条语句是一个整体,要么一起执行,要么都不执行
print("这是我们的CEO")
print("CEO正在开会,一个小时后才能见记者")
else:
# 当输入的name不是Bill时,会执行下面的两条语句
print('对不起,我不认识这个人')
print('请重新输入名字')
运行上面代码,如果输入的name是Bill,则会输出下面的结果
这是我们的CEO
CEO正在开会,一个小时后才能见记者
如果输入的name不是Bill,则会输出下面的结果:
对不起,我不认识这个人
请重新输入名字
需要说明的是,虽然 Python语法允许代码块随意缩进N个空格(或其它空白符,如Tab),但同一个代码块内的代码必须保持相同的缩进,也就是说,不能一会缩进2个空格,一会缩进4个空格。
例如下面的代码就会发生错误。
示例代码:if语句错误.py
name = input("请输入你的名字:")
if name == "Bill" :
print("这是我们的CEO")
print("CEO正在开会,一个小时后才能见记者")
上面代码中,由于if语句后面没有缩进的代码,其实相当于if语句没有了代码块,所以Python程序执行会抛出如图1所示的错误。
就算if语句的代码块中所有的语句都有缩进,但由于缩进的尺度不同,在执行时也会抛出异常,看下面的代码:
示例代码:if语句错误1.py
name = input("请输入你的名字:")
if name == "Bill" :
print("这是我们的CEO")
print("CEO正在开会,一个小时后才能见记者")
在上面的代码中,倒数第2条语句缩进了4个空格,而最后一条语句缩进了5个空格,所以执行这段代码,会抛出如图2所示的异常。
还有一些情况,尽管程序执行不会有任何问题,但由于缩进的错误,会导致程序逻辑出现问题。例如,下面的代码,最后一条语句本应该属于if语句,但由于没有缩进,所以if语句和最后一条print语句其实是平级的,则就会导致不管输入的是什么,都会执行最后一条print语句。
示例代码:if没有缩进.py
name = input("请输入你的名字:")
if name == "Bill" :
print("这是我们的CEO")
print("CEO正在开会,一个小时后才能见记者")
另外,组成代码块的不光是缩进,还有冒号(:),也就是说,代码块的是从冒号开始的,所以在if、elif和else后面,千万不要忘了写冒号,否则Python程序不会成功运行。
在下面的代码中,if语句后面没有写冒号。
示例代码:if没有冒号.py
name = input("请输入你的名字:")
if name == "Bill"
print("这是我们的CEO")
print("CEO正在开会,一个小时后才能见记者")
运行这段代码,会输出如下的错误。
File "/Python编程思想/04-控制流程/if没有冒号.py", line 13
if name == "Bill"
^
SyntaxError: invalid syntax
从前面的例子可以看出,if语句的条件似乎只有布尔类型,或者是True,或者是False,那么是不是只有布尔类型呢?其实并不是这样的。if语句的条件可以是任意类型,这些类型的值最终都会被解释为布尔类型。而这些类型的一些特殊值会被解释成False,其他的值都被认为是True。
if语句的条件支持的主要类型包括布尔、对象、数值、字符串、元组、列表和字典,这些类型中如下的值会被解释为False。
False、None、0、""、()、[]、{}
从被解释为False的值看出,所有的集合类型,都是空集合被解释为False,而基础类型,一般都是该类型的默认值(如数值的0,字符串的空串)被解释为False。
示例代码:if条件的类型.py
# 定义空字符串
s = ""
if s :
print('s不是空字符串')
else:
print('s是空字符串')
# 定义为0的值
value = 0
if value:
print('value的值不是0')
else:
print('value的值是0')
value = 0
# 定义空列表
persons = []
if persons:
print('persons不是空列表')
else:
print('persons是空列表')
# 定义空字典
data = {}
if data:
print('data不是空字典')
else:
print('data是空字典')
如果使用缩进标识代码块会带来一个问题,就是如果代码块为空,也就是没有一行代码的代码块该如何处理呢?如果使用其他语句,如Java,就用一对空的大括号就可以了,但Python该如何做呢?其实Python的设计者也考虑到这种情况了,这就是pass语句。首先要知道,Python的代码块必须至少有一条语句,否则就没有所谓的缩进了。如果代码块中确实没有一条实际的代码,那么就用pass语句代替,pass代表空语句,其实就是一个语句占位符,用来确定代码缩进的。
示例代码:pass语句.py
name = input("请输入你的名字:")
if name == "Bill" :
# 只有在name等于Bill时,才会执行下面两条语句
# 这两条语句是一个整体,要么一起执行,要么都不执行
print("这是我们的CEO")
print("CEO正在开会,一个小时后才能见记者")
else:
pass # 代码块中没有任何语句时,必须用pass