所有编程语言都要遵循语言结构和流程控制,它们控制了整个程序运行的步骤。流程控制包括顺序控制、条件控制、循环控制。所谓顺序控制,就是按照正常的代码执行顺序,从上到下、从文件头到文件尾依次执行指定的每条语句。
一、if判断
1.if语句
几乎所有的语言都有if语句,if语句按照条件选择执行不同的代码。Python的格式如下:
if 表达式:
语句1
语句2
......
注意事例中“语句1”“语句2”的前缩进(相对于if有四个空格开头)不能省略。每条if语句的核心都是“True”或者“False”的表达式,这种表达式被称为条件测试。Python根据条件测试的值分为“True”或者“False”来决定是否执行if语句中的代码。如果条件测试的值为“True”,Python就执行紧跟在后面的代码块:如果值为“False”,Python就忽略这些代码不去执行。
实操:
x =True
if x :
print("It is True!")
x1 = False
if x1 :
print("It is False")
x3 = 0
if x3 :
print("x3 is not zero")
x4 = "Hello"
if x4 :
print("x4 is",x4)
x5 = ""
if x5 :
print("Hello world!")
最后一个例子执行结果是没有输出的,说明代码块中的print语句没有被执行,表明“if”后面的条件测试值是“False”。不单单是字符串,条件测试中空列表、空元组、空字典也是“False”
2、else语句
else语句很好理解,当“if”语句条件测试值为“False”的时候执行“else”后的语句,“else”是“if”语句的可选项,并不一定非要有“else”。注意“else”语句不能单独出现,必须跟在“if”后面
例如:
x = 0
if x:
print("x is not zero")
else:
print("x is zero")
3、elif语句
有时候很多时候可能会需要测试到多个条件,单纯的“if...else”已经不能满足所有需求,这种情况下就可以使用“elif”.“elif”和“else”一样都是“if”的可选项,并且“elif”也不能单独出现,必须跟在“if”后面。
例如:
x = 89
if x > 90 :
print("优秀")
elif x > 80 :
print("良好")
elif x > 60:
print("及格")
二、循环
程序一般都是顺序执行的,Python提供了各种控制结构,允许更为复杂的执行路径。循环允许我们执行相同的语句而不需要重复代码。Python中主要有两种循环结构:while循环和for循环。
1、while循环
while循环是Python中最简单的循环语句,它的语法格式如下:
while 表达式:
语句1
语句2
......
while循环实操:
x = 1
while x < = 10:
print(x)
x += 1
这里执行打印输出的是1~10的数字。注意“x+=1”不能省略,否则会产生无限循环或者死循环。因为如果没有“x+=1”,那么变量“x”将永远小于“10”,while语句中的“x<=10”条件测试,则永远是“True”,那么“print(“x”)”将会一直执行下去,最终可能导致系统资源被耗尽。
2、for循环
for循环有个比while循环更丰富的作用,它的语法格式如下:
for 变量 in 序列:
语句1
语句2
......
for循环实操:
for x in (1,2,3,4,5,6,7,8,9,10)
print(x)
for x in range(1,10) :
print(x)
for x in range(1,10,2):
print(x)
for i in range(10):
if i > 5:
break
print(i)
知识拓展:
pass语句:在python中pass语句是空语句,其作用是保持程序结构的完整性。pass不做任何操作,一般用作占位语句。例如:
for x in range(10):
if x == 3:
pass
else:
print(i)
从上面的执行结果(打印输出1~10)看,pass并没有做任何操作。哪为什么需要这样的语句呢?这不得不从python的缩进说起。
缩进在Python中起着至关重要的作用。在Python中,行首的空格用来决定逻辑行的缩进层次,从而决定语句的分组。这意味着同一层次的语句必须要有相同的缩进,每一组这样的语句称为一个块。前面的if、while、else和for等都已经遇到了一行结尾是“:”、后一行必须是有行首空白的情况(一般需要相对于前一行多四个空格)。不止是流程控制,在后续章节要讲到的函数、类等语法中也会用到缩进(行首空格,一般一组缩进四个空格)。在Python中,如果语法的缩进不正确,就会引起程序出错。
# 错误事例
i = 3
print(3)
print(5)
当运行这个程序的时候(注意第一个print()之前的空格),将会得到以下错误信息:
print(3)
^
IndentationError: unexpected indent
Python的这个信息告诉我们这个程序的语法是无效的,也就是说程序的编写是不正确的,所以不能随意地开始新的语法块。
那么pass的作用是什么呢?正如开头所讲,其作用就是“保持程序结构的完整性”。因为流程控制之后的一行必须是有缩进的语法块,然而有时候可能并不需要执行什么东西或者编写程序的时候还没有想好要编写执行的内容,这时候为了保持程序的结构性完整,就需要用到pass占位。
# 错误示例
x = 35
if x == 35 :
# TODO
else:
print("x不是35")
运行这个例子,会收到一个错误信息:
else:
^
IndentationError: expected an indented block
python解释器期望能有一个缩进的语法块,但是由于没有任何语法块的提供,所以程序无法执行,这时候就可以使用pass来占位。
# 修改后的代码
x = 35
if x == 35 :
# TODO
pass
else:
print("x不是35")
使用pass占位后,程序就能顺利执行了,虽然我们可能没有想好要做什么,但是并不影响后续程序的运行。
三、循环语句中的else
在python中,不只有if可以和else组合使用,while和for循环同样可以组合出现。
在和while组合出现的else后的代码块,会在while后的条件测试为“False”时执行。例如:
count = 0
while count < 5 :
print(count,"is less than 5")
count = count + 1
else:
print(count,"is not less than 5")
执行结果为:
0 is less than 5
1 is less than 5
2 is less than 5
3 is less than 5
4 is less than 5
5 is not less than 5
从执行结果可以看到,最后一个count为“5”,不满足while后面的条件测试 ,所以就可以执行else后的语句。但是需要注意的是,如果中途break退出循环是不会执行else后代码块的,例如:
count = 0
while count < 5 :
print(count,"is less than 5")
if count == 3 :
break
count += 1
else:
print(count,"is not less than 5")
运行结果:
0 is less than 5
1 is less than 5
2 is less than 5
3 is less than 5
可以看到中途break退出循环,else后的代码并没有执行,同样地,for后面组合的else与此情况大同小异,例如:
for count in range(5):
print(count,"in for segment")
else:
print(count,"in else segment")
运行结果:
0 in for segment
1 in for segment
2 in for segment
3 in for segment
4 in for segment
4 in else segment
可以看到else后的代码块被正确执行了。同样地,如果由于break操作退出for循环,是不会执行else后的代码块的。 例如:
for count in range(5):
print(count,"in for segment")
if count == 3:
break
else:
print(count,"in else segment")
运行结果:
0 in for segment
1 in for segment
2 in for segment
3 in for segment
从执行结果可以看出,由于是break退出的for循环,所以else后的代码块没有被执行。