2.5 Python程序流程控制语句
在Python程序运行过程中有一个内部命令指针,它指向当前要运行的语句行。因此,Python程序流程控制语句可以改变程序命令指针的位置。
1.顺序执行
顺序执行指程序由上至下,逐行逐条执行每行命令。Python程序默认顺序执行。
2.条件分支语句
条件分支语句一般指if语句。
(1)单条件分支命令格式。
if逻辑表达式: 命令块 else : 命令块
(2)多条件语句格式。
if逻辑表达式1: 命令块 elif逻辑表达式2: 命令块 … else : 命令块
示例2-13:根据学生分数打印字母等级,程序代码如下。
#示例2-13 根据学生分数打印字母等级.py score =float(input(’请输入成绩 :')) level = int(score / 10) if level >= 10: print('Level A+') elif level == 9: print('Level A') elif level == 8: print('Level B') elif level == 7: print('Level C') elif level == 6: print('Level D') else: print('Level E')
程序运行结果如下:
请输入成绩 :68 Level D
(3)三元条件语句格式。
变量v=表达式结果x if 逻辑表达式A else表达式结果y
解释:如果“逻辑表达式A”为True,则“表达式结果x”赋值给变量v,否则把“表达式结果y”赋值给变量v。
下面是示例2-14。
#a是判定条件 a=True b=5 c=20 #方法一:为真时的结果if判定条件else为假时的结果 d = b if a else c #如果a为真,结果是b,否则结果是c print(’方法一输出结果:' , d) #方法二:判定条件and为真时的结果or为假时的结果 d = a and b or c #如果a为真,结果是b,否则结果是c print(’方法二输出结果:' , d) #以上两种方法等同于if ... else ... if a: d = b #d=b=5 else: d = c #d=c=20 print('if语句的输出结果:', d)
程序运行结果:
方法一输出结果: 5 方法二输出结果: 5 if语句的输出结果: 5
3.循环语句
Python有三种循环类型:for循环、while循环和内嵌循环。循环体中的控制语句有break语句(循环中断)、continue语句(跳过循环体后面的语句开始执行下一轮循环语句块)。
1)for循环
首先学习range()函数的用法。Python 3的range()函数返回的是一个可迭代对象(类型是对象)而不是列表类型,可用在for循环中。函数语法:
range(start, stop[, step])
start:计数从“start”开始,默认从0开始。例如,range(5)等价于range(0,5)。
stop:计数到“stop”结束,但不包括“stop”。例如,range(0,5)产生的是[0, 1, 2, 3, 4]的序列对象,没有5。
step:步长,默认为1。例如,range(0,5)等价于range(0, 5,1)。
例如,range(10)会产生一个[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]的序列对象。
for循环类型用于遍历一个序列对象中的所有元素,如序列数据(list, tuple, range, str)、集合和映射对象(如字典)等。这与其他计算机语言的for语句有本质区别。
Python 3的for语句格式如下:
for变量a in 序列对象list : 循环体语句块
下面看一个例子,打印出福利彩票3D的全部号码。我们知道福利彩票3D的号码范围为000~999,即共有1000种不同的号码,这是一个0~9的排列问题,如示例2-15所示。
#打印全排列m #排列m m=3 #=3 3D; =5 排列5 print() print(’共有排列数为: ',10**m) # **代表平方 for a in range(10**m): print(str(a).zfill(3)) #转换为字符串,前面补0
程序运行结果:
共有排列数为:1000 000 001 002 003 004 ...中间省略 998 999
示例2-16:通过for循环打印九九乘法表。
for j in range(1, 10): for i in range(1, j+1): print('%d*%d=%d' %(i, j, i*j), end='\t') i += 1 print() j += 1
程序运行结果:
1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 1*4=4 2*4=8 3*4=12 4*4=16 1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
2)while循环
Python的while命令格式如下:
while 逻辑表达式(也称循环条件): 循环体命令块
示例2-17:通过while循环打印九九乘法表。
j = 1 while j <= 9: i = 1 while i <= j: print('%d*%d=%d' %(i, j, i*j), end='\t') i += 1 print() j += 1
程序运行结果:
1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 1*4=4 2*4=8 3*4=12 4*4=16 1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
3)嵌套循环
各种循环可以嵌套,但是语句块空格需要统一,而完整功能的循环体就是一个语句块。
我们来看一个号码组合的例子,打印出体育彩票11选5的全部号码组合。从题意中就能看出,这需要5层循环,其中每组号码排列有号码重复,组合没有号码重复。
请看示例2-18。
#打印出彩票11选5的全部号码组合 #组合m选5 #m=11, n=5 print() m=11 #M hm=[] for a in range(1, m+3): for b in range(a+1, m+1): for c in range(b+1, m+1): for d in range(c+1, m+1): for e in range(d+1, m+1): hm.append([a, b, c, d, e]) #print(f, e, d, c, b, a) print(’共有组合数为: ', len(hm)) for x in hm: print(x)
程序运行结果:
共有组合数为: 462 [1, 2, 3, 4, 5] [1, 2, 3, 4, 6] [1, 2, 3, 4, 7] [1, 2, 3, 4, 8] [1, 2, 3, 4, 9] [1, 2, 3, 4, 10] [1, 2, 3, 4, 11] [1, 2, 3, 5, 6] ...中间略去 [5, 8, 9, 10, 11] [6, 7, 8, 9, 10] [6, 7, 8, 9, 11] [6, 7, 8, 10, 11] [6, 7, 9, 10, 11] [6, 8, 9, 10, 11] [6, 8, 9, 10, 11] [7, 8, 9, 10, 11]
4)循环体内的分支语句
循环体内也可以有分支语句,但是语句块空格需要统一,而完整功能的分支体就是一个语句块。分支语句和循环语句混合成为一个复杂的语句块。
一般来说,分支语句可以控制循环体内的循环次数。
(1)满足分支条件的break语句可以使程序中止当前循环体的运行,使命令运行指针跳出当前循环体,并指向循环体外部的第一条语句行开始执行命令。
请看示例2-19,打印大于0且小于20的所有偶数。
#打印大于0且小于20的所有偶数 print() for a in range(1,20): if a%2==0: #是偶数 print(a, end=', ')
程序运行结果:
2,4,6,8,10,12,14,16,18,
请看示例2-20。
#打印1-20的所有偶数,含20 print() for a in range(1,100): if a%2==0: #是偶数 print(a, end=', ') if a==20: #如果a=20, 则跳出循环体 break
程序运行结果:
2,4,6,8,10,12,14,16,18,20,
(2)continue语句可以使程序中止循环体内的continue语句后面的所有语句块,而接着执行下一轮循环语句块。
请看示例2-21。
#打印1-20的所有偶数,含20 print() for a in range(1,100): if a%2! =0: #不是偶数 continue #继续下一轮循环,后面循环体内的语句都不执行了 print(a, end=', ') if a==20: #如果a=20, 则跳出循环体 break
程序运行结果:
2,4,6,8,10,12,14,16,18,20,
4.占位语句
占位语句指pass语句,什么也不执行,只是在语句体中占位。
由于Python语法结构的特殊性,在设计程序时,针对没有想好的分支语句、循环语句或函数体的命令块,如果用空格代替,就会出现语法错误。此时,我们就可以用pass语句作为程序结构的占位语句。当想好具体的算法时,再用算法命令块去代替pass占位语句。
请看示例2-22。
#打印1-20的所有偶数,含20 print() for a in range(1,100): if a%2==1: #是奇数 pass #占个位置 else: print(a, end=', ') if a==20: #如果a=20,则跳出循环体 break
程序运行结果:
2,4,6,8,10,12,14,16,18,20,