文章目录
- if 语句
- 条件测试
- 简单 if 语句
- if-else 语句
- if-elif-else 语句
- for 循环语句
- while 循环语句
一般情况下,代码都是从上往下顺序执行的。但有些情况下需要根据具体情况有选择地执行代码,或者让一段代码执行多次。这就要用到
流程控制语句。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('优秀')
上述代码中的执行过程如下图所示,菱形框中的为条件测试:
Created with Raphaël 2.3.0 开始 输入grade grade<60 不及格 结束 grade<70 及格 grade<80 良好 优秀 yes no yes no yes no
elif
的数量可以是任意的。如果if
和elif
的条件都不成立的时候什么都不需要执行,最后的else
及其冒号后面的语句就可以省略。
for 循环语句
一般情况下,程序是按顺序执行的,即执行完一条语句,就去执行下一条语句,但有时希望重复执行同一条语句,比如希望在屏幕上打印HelloWorld
100次,如果不用循环语句,就不得不写100遍print('HelloWorld')
。
Python的for循环语句需要和列表搭配使用,先看下面的例子:首先定义了一个包含6个数字的列表,然后就是for语句了,先说程序的执行过程:让i
等于lst
的第0个元素,然后执行print语句;再让i
等于lst
的第1个元组,然后执行print语句;再让i
等于lst
的第3个元素,然后执行print语句…直到i
等于lst
的最后一个元素,然后执行print语句。
lst = [1, 2, 3, 4, 5, 6]
for i in lst:
print(i, i ** 2, i ** 3)
1 1 1
2 4 8
3 9 27
4 16 64
5 25 125
6 36 216
如果上面代码不用for语句就是这样的:
i = lst[0]
print(i, i ** 2, i ** 3)
i = lst[1]
print(i, i ** 2, i ** 3)
i = lst[2]
print(i, i ** 2, i ** 3)
... ...
... ...
i = lst[5]
print(i, i ** 2, i ** 3)
可以看出,如果不用for语句,除了赋值语句i = lst[x]
,print
语句每次都是一样的。在for语句中,for语句后面的语句为循环体,也就是每次都相同的语句,在上面的例子中,循环体就是print(i, i ** 2, i ** 3)
。循环体可以包含多条语句,例如将上面的print语句写成3条语句分别打印i的一次方、二次方、三次方:
lst = [1, 2, 3, 4, 5, 6]
for i in lst:
print(i)
print(i ** 2)
print(i ** 3)
但需要注意的是,循环体的每条语句前面都要缩进,也就是按tab键。
如果想结束循环体,也就是在循环执行结束后再写一些语句,而不让这些语句被当作循环体,不缩进就好了,例如:
lst = [1, 2, 3, 4, 5, 6]
for i in lst:
print(i, i ** 2, i ** 3)
print('All numbers have been processed!')
1 1 1
2 4 8
3 9 27
4 16 64
5 25 125
6 36 216
All numbers have been processed!
可以看到,print('All numbers have been processed!')
前没有缩进,所以没有被当作循环体,它只执行了一次。
另外,元组、区间(range
)也可以和for搭配使用,例如下面的例子中:对range(6)
即区间[0, 6)
中的每个整数执行循环体,区间中有6个整数,所以循环体执行了6次。
for i in range(6):
print('HelloWorld')
HelloWorld
HelloWorld
HelloWorld
HelloWorld
HelloWorld
HelloWorld
while 循环语句
前面介绍过for
循环语句,但for
必须要搭配列表使用,for
比较适合于循环次数已知的情况,但有时循环次数事先是不知道的,例如:不断地让用户输入一个数字,然后程序输出这个数的相反数,当用户输入0的时候,程序才终止。如果用for
循环的话,就必须定义一个无限长的列表,才能达到这个效果(因为你也不知道用户最多会输入多少次,所以这个列表必须为无限长)。而定义一个无限长的列表是无法实现的。
循环次数不确定的循环语句比较适合用while
语句。while
语句同样要用到条件测试表达式,一个完整的while
语句执行过程如下:
①判断while
后面的条件测试是否为真;
②如果为真,就执行循环体;如果为假,跳到第④步;
③(条件为真才会执行这一步)执行循环体,然后回到第①步;
④循环结束。
来看个例子:
x = 0
while x < 30:
x = x + 13
print(x)
首先给x
赋值为0。然后就是循环语句了,首先判断x < 30
,由于0 < 30
,所以条件为真,执行循环体x = x + 13
,这时x
的值就为13了;然后再次判断x < 30
,由于13 < 30
,条件为真,继续执行循环体,然后x
的值就变成26了;然后再判断x < 30
, 由于26 < 30
,条件还是为真,继续执行循环体x = x + 13
,然后x
的值就变成39了;然后判断x < 30
,由于39 > 30
,条件为假,就不再执行循环体了,循环结束。接下来就执行while
循环后面的语句,也就是print(x)
,程序输出如下:
39
这段程序的流程图如下:
再回到本节开头的那个例子:不断地让用户输入一个数字,然后程序输出这个数的相反数,当用户输入0的时候,程序才终止。用while
语句的写法如下:
s = input('输入一个数字:')
number = float(s)
while number != 0:
print(-number)
s = input('输入一个数字:')
number = float(s)