一般情况下,代码都是从上往下顺序执行的。但有些情况下需要根据具体情况有选择地执行代码,或者让一段代码执行多次。这就要用到流程控制语句。Python中的流程控制语句有if
语句、for
循环语句、while
循环语句。其中if
语句用于根据表达式的真值来有选择地执行代码,for
和while
循环语句用于让一段代码循环执行多次。
if
语句首先介绍什么是条件测试
,条件测试
也是一条表达式,但它的值比较特殊。通常的表达式例如1 + 2
、'abc' + 'def'
,这些表达式的值要么是数字,要么是字符串或者其它类型。而条件测试表达式的值是bool
类型,也就是只可能是True
或False
,不可能为其它的值。可以把条件测试表达式理解为一个命题,如果命题为真,那么它的值就是True
,如果命题为假,它的值就是False
。
然后看几个条件测试表达式的例子:
print(0 < 1) print(1 <= 1) print(0 == 1)
上面的0 < 1
,1 <= 1
,0 == 1
就是条件测试表达式。0 < 1
是正确的,所以它的值为True
;1 <= 1
也是正确的,它的值也为True
;0 == 1
可以理解为命题命题0和1相等
,这是一个假命题,所以它的值为False
。
if
语句知道什么是条件测试后,就可以来看if
语句了。简单if
语句的功能就是先判断条件测试为真还是为假,如果为真,就执行条件测试后面的语句,否则不执行。
来看下面的例子:首先定义了一个变量temperature
,它的值为30。然后是if
语句,if
后是一个条件测试temperature > 26
,因为30 > 26
是一个真命题,所以接下来会执行语句print('太热了')
。
temperature = 30 if temperature > 26: print('太热了')
上面例子的输出结果如下:
太热了
但如果temperature
的值为20,那么temperature > 26
就是一个假命题,就不会执行print('太热了')
了。
在这个例子中,temperature
的值在写代码的时候就设置好了,所以看不出if
语句有什么用。但在实际情况中,temperature
的值在写代码时往往是不知道的,需要在程序执行时人工输入或者以其它方式得到。例如下面的例子:
s = input('输入温度:') temperature = float(s) if temperature > 26: print('太热了')
首先调用input
函数让用户输入温度,用户的输入会以字符串的形式存在变量s
中。然后用函数float
将字符串s
转换为数字并赋值给变量temperature
。然后就是前面讲的if
语句了。
if
语句的冒号:
后面可以是一条语句,也可以是多条语句组成的语句块,如果要执行多条语句,在每条语句前面按tab键缩进就好了。例如下面的例子中,前两条print
语句前面有缩进,所以会被视为if
语句的一部分,它们是否执行取决于temperature > 26
是否成立;而第三条print
语句print('程序执行结束')
前面没有缩进,它不属于if
语句的一部分,不论temperature > 26
是否成立,它都会执行。
temperature = 30 if temperature > 26: print('太热了') print('开风扇') print('程序执行结束')
if-else
语句有时会有这种情况:当条件测试为真时,就去执行语句A,否则就去执行语句B。这可以用多个if
语句来实现,例如:
temperature = 20 if temperature > 26: print('太热了') if temperature <= 26: print('凉快!')
更为方便的做法是使用if-else
语句。if-else
语句的作用是首先判断if
后的条件测试,如果为真,就执行条件测试后面的语句,否则就执行else
后面的语句。例如上面的例子写成if-else
的形式就是:
temperature = 20 if temperature > 26: print('太热了') else: print('凉快!')
else
必须和if
搭配使用。
if-elif-else
语句if-else
适用于只要判断两种情形的情况,但有时需要判断多种情形,例如对于学生成绩,0-60分时,输出“不及格”;60-70分时,输出“及格”;70-80分时,输出“良好”;80分以上时,输出“优秀”。这时就需要用到if-elif-else
语句了。
s = input('输入成绩:') grade = int(s) if grade < 60: print('不及格') elif grade < 70: print('及格') elif grade < 80: print('良好') else: print('优秀')
上述代码中的执行过程如下图所示,菱形框中的为条件测试:
elif
的数量可以是任意的。如果if
和elif
的条件都不成立的时候什么都不需要执行,最后的else
及其冒号后面的语句就可以省略。