大多数情况下,Python代码是从上到下逐行解释执行,但是某些场景却不适用于这种顺序结构,比如在射击游戏中,通过输入A、S、D、W四颗方向键来控制精灵(游戏角色)的运动,再比如:求1到100的和,如果要实现上述的需求,那得就用流程控制来实现。在 Python 中有三种控制流语句—— if、for、 和 while 。
if语句是分支结构,对应的语境是如果···就···、如果···否则···,表示满足条件就执行。if语句的格式为:
if 逻辑运算值:
语句
...
elif 逻辑运算值:
语句
...
else:
语句
...语法说明:
-
if、elif、else是分支语句的关键字,其中,elif和else可省略,elif可有多个; -
逻辑运算值是逻辑运算的结果,简单的可以认为是
True或者False; -
缩进,
if、elif、else后面必须有冒号(:),并且其子句必须有相同的缩进; -
分支语句按顺序执行,前面的语句满足时,后面的便不再执行;
案例:
-
打招呼,根据当前时间,输出相应的招呼语句:
# 如果是早上,输出早上好 is_morning = True if is_morning: print('早上好')
# 判断当前时间,输出早上好或者下午好 time_now = 'afternoon' if time_now == 'morning': print('早上好') elif time_now == 'afternoon': print('下午好')
# elif 多分支语句 time_now = 'night' if time_now == 'morning': print('早上好') elif time_now == 'afternoon': print('下午好') elif time_now == 'night': print('晚上好')
# else语句,前面的判断不满足时执行 time_now = 'unknow_time' if time_now == 'morning': print('早上好') elif time_now == 'afternoon': print('下午好') elif time_now == 'night': print('晚上好') else: print('你好')
-
简单成绩管理系统,根据输入的成绩,输出
优秀([90, 100])、良好([80,90))、中等([60,80))、不及格([0, 60)) :score = input('请输入分数:') # input输入的值都是字符串,作比较运算,需要将字符串转换为数值型 score = int(score) if score >= 90: print('优秀') # Python可以使用连续使用运算符,也可以使用:score >= 80 and score < 90 elif 80 <= score < 90: print('良好') elif 60 <= score < 80: print('中等') else: print('不及格')
-
健康小助手,根据输入的身高体重计算BMI,并输出响应的健康状况,BMI的取值区间如下表所示:
健康状况 国际BMI值(kg/m2) 国内BMI值(kg/m2) 偏瘦 <18.5 <18.5 正常 18.5~25 18.5~24 过重 25~30 24~28 肥胖 >=30 >=28 height = float(input("输入身高(米):")) weight = float(input("输入体重(千克):")) # 计算 BMI 指数 bmi = weight / (height * height) print('BMI指数为', bmi) if bmi < 18.5: print("偏瘦") elif 18.5 <= bmi < 24: print("正常") elif 24 <= bmi < 25: print("偏胖") else: print("超胖")
for、while语句是循环结构,所谓的循环结构就是将某段代码重复的执行一定的次数,在编程中使用得非常普遍。for循环一般用来执行特定的次数,而while循环用来执行不确定的次数,但是两则基本可以相互转换。
for循环要搭档关键字in一起使用,其语法给是为:
for 变量 in sequence:
子句
...语法说明:
-
for···in···是固定的格式,注意冒号和代码缩进; -
sequence简单的理解为序列,表示可以重复执行的对象(迭代对象),sequence会将每次循环的临时值赋值给变量;
看看下面的示例:
for i in 'hello,Python':
print(i)上面的代码中,hello,Python是一个序列,for循环会根据序列的元素个数(12个元素)计算循环的次数,并将hello,Python的字符逐一赋值给变量i,执行的示意图如下所示:
print()函数默认执行完就换行,所以执行结果为:
h
e
l
l
o
,
P
y
t
h
o
n上一节的示例遍历hello,Python这个序列,但是如果要重复执行一段代码,需要使用range()函数。range()函数用于生成数字序列,用于重复执行一段代码,如下示例:
# 将 "hello, Python" 输出
for i in range(10):
print('hello, Python')运行结果:
hello, Python
hello, Python
hello, Python
hello, Python
hello, Python
hello, Python
hello, Python
hello, Python
hello, Python
hello, Pythonrange()函数生成数字序列:
# 生成数字序列
for i in range(10):
print(i)运行结果:
0
1
2
3
4
5
6
7
8
9range()函数当只有一个参数n时,生成0···n-1 的序列,默认从0开始。假设生成的序列是指定范围,如:5~10,则需要指定两个参数,分别表示序列的开始和结束:
for i in range(5, 10):
print(i)运行结果:
5
6
7
8
9
range()函数生成的序列,包括序列的开始,不包括序列的结束。按照数学上的理解,range(start, stop)函数,start是开区间,stop是闭区间,表示为:[start, stop)。
以上的示例生成的序列是连续的,如果要生成规律性的间隔数字序列,可以指定步长(step),示例:
for i in range(0, 10, 3):
print(i)运行结果:
0
3
6
9range()函数的第三个参数用于指定序列的步长,表示元素值的递增幅度(step),所以以上示例生成的序列为:0,0+3,3+3,6+3。step默认为1,不能为0,可以为负数:
for i in range(10, 0, -3):
print(i)运行结果:
10
7
4
1for语句可以和else子句配合使用。else语句在for语句循环结束以后执行。示例:
for i in range(10, 0, -3):
print(i)
else:
print('运行完毕')运行结果:
7
4
1
运行完毕注意:
else语句还可以和break语句结合使用,具体参见下文break章节。
while是Python中的另外一种循环结构,主要用于执行不确定次数的循环。while语句的格式为:
while 逻辑运算值:
子句
...逻辑运算值是逻辑运算的结果,要么为Ture,要么为False。当逻辑运算值为Ture时,while结构执行,当逻辑运算值为False时,while结构终止。示例:
i = 0
while i <= 5:
print(i)
i += 1运行结果:
1
2
3
4
5特别注意,while结构一定要注意逻辑运算值,避免陷入无限循环。如上述示例中,去掉i += 1这一行,i <= 5衡成立,所以代码则一直运行。
流程控制子句嵌套即条件语句或者循环语句可以相互嵌套,直接看示例:
for i in range(1, 6):
for j in range(1, 6):
print(j, end=' ')
print()运行结果:
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5 在某些场景中,需要"打乱"循环结构的执行流程。Python提供了break、continue、pass子句用于改变循环结构的执行流程。
break
break语句用于终止最近的for 或 while循环。示例:
i = 0
while True:
# 当 i >= 5 时终止循环
if i >= 5:
break
print(i)
i += 1运行结果:
0
1
2
3
4break语句还可以结合for...else语句使用,当循环结构被break终止时,else语句便不会执行,换句话说,break和else语句是互斥关系。示例:
for n in range(2, 10):
for x in range(2, n):
if n % x == 0:
break
else:
print(n, '是素数')当break执行时,else语句便不会执行,执行结果:
2 是素数
3 是素数
5 是素数
7 是素数continue
continue语句表示结束当前循环,继续执行下一次循环。示例:
for num in range(2, 10):
if num % 2 == 0:
print("偶数", num)
continue
print("奇数", num)运行结果:
偶数 2
奇数 3
偶数 4
奇数 5
偶数 6
奇数 7
偶数 8
奇数 9pass
pass语句不执行任何操作,可用于保证语法的完整性,还可以用作函数或条件子句的占位符。例如:
while True:
pass