第3章 程序的控制结构 导学 本章主要介绍Python程序设计中的程序控制结构,通过本章的学习读者可以掌握Python程序设计的基本控制结构及程序设计技巧。 了解: 3种基本程序控制结构的流程图,以及程序设计的基本方法。 掌握: 3种基本程序控制结构,并能够进行具体程序的设计。 Python程序设计有3种基本程序控制结构: 顺序结构、分支结构和循环结构。程序设计通常以顺序结构为主框架,程序语句按先后顺序逐条命令执行。当程序中需要判断某些条件或多次重复处理某些事件时,可以使用分支结构或循环结构控制程序的执行流程。 3.1顺 序 结 构 图31顺序结构 的流程图 顺序结构是程序设计的基本架构结构,在一个没有分支结构和循环结构的程序中,它按程序文件中命令语句的先后顺序,逐条依次执行。顺序结构程序流程图如图31所示,在图中,有一个程序入口、一个程序出口,程序运行过程中依次执行语句1和语句2。 下面是一个顺序结构程序的例子。 【例31】BMI(Body Mass Index)指数,即体质指数,计算公式为体质指数(BMI)=体重(kg)÷身高2(m),是目前国际上常用的衡量人体胖瘦程度以及是否健康的一个标准。编写一个求体质指数的程序,该程序为顺序结构设计。代码如下: w=float(input("请输入您的体重(kg):"))#输入体重值(以kg为单位) h=float(input("请输入您的身高(m):")) #输入身高值(以m为单位) B=w/h**2 #计算BMI指数 print("您的BMI指数为",B) #输出BMI指数 上述代码的输出结果如图32所示。 图32例31运行结果 3.2分 支 结 构 分支结构就是按照设计好的条件,经过判断后有选择地执行程序中的某些特定语句序列,或使程序跳转到指定语句后继续运行。在Python程序设计中,分支结构包括单分支结构、双分支结构和多分支结构。 3.2.1if语句 if语句属于单分支结构,其语句格式如下: if 表达式: 语句序列 单分支结构程序功能: 程序运行到if语句时,判断条件表达式是否成立,如果条件表达式的值为True,则执行内嵌的语句序列; 如果条件表达式的值为False,则不做任何操作。单分支结构的流程图如图33所示。 图33单分支结构的流程图 下面是一个单分支结构程序的例子。 【例32】能被2整除的数是偶数。编写一个判断整数是否是偶数的程序,该程序为单分支结构设计。代码如下: x=int(input("请输入一个整数:"))#输入一个整数 if x%2==0: #判断x是否为偶数 print("这个数是偶数") #条件表达式值为True,输出该数是偶数 提示: 在Python程序设计中,通过命令行的缩进标识语句序列的开始与结束。如例32中if语句所包含的语句序列为该程序中的第3条命令,该条命令起始位置比第2条命令的起始位置向右缩进4个空格。 上述代码的输出结果如图34所示。 图34例32运行结果 【例33】编写一个判断整数是否是奇数的程序。代码如下: x=int(input("请输入一个整数:"))#输入一个整数 if x%2!=0: #判断x是否为奇数 print("这个数是奇数") 提示: “!=”为比较两个对象是否不相等。 3.2.2if...else语句 if...else语句属于双分支结构,其语句格式如下: if 表达式: 语句序列1 else: 语句序列2 双分支结构程序功能: 程序运行到if语句时,判断条件表达式是否成立。如果条件表达式的值为True,则执行内嵌的语句序列1; 如果条件表达式的值为False,则执行else后面内嵌的语句序列2。双分支结构的流程图如图35所示。 图35双分支结构的流程图 下面是一个双分支结构程序的例子。 【例34】整数中,能被2整除的数是偶数,不能被2整除的数是奇数。编写一个判断整数是偶数还是奇数的程序,该程序为单分支结构设计。代码如下: x=int(input("请输入一个整数:"))#输入一个整数 if x%2==0: #判断x是否为偶数 print("这个数是偶数") #条件表达式值为True,输出该数是偶数 else: print("这个数是奇数") #条件表达式值为False,输出该数是奇数 上述代码的输出结果如图36所示。 图36例34运行结果 例34程序也可以根据例32和例33设计为单分支结构。代码如下: x=int(input("请输入一个整数:"))#输入一个整数 if x%2==0: #判断x是否为偶数 print("这个数是偶数") #条件表达式值为True,输出该数是偶数 if x%2!=0: #判断x是否为奇数 print("这个数是奇数") 3.2.3if...elif...else语句 if...elif...else语句属于多分支结构,其语句格式如下: if 表达式1: 语句序列1 elif 表达式2: 语句序列2 … elif 表达式n: 语句序列n else 语句序列n+1 多分支结构程序功能: 程序运行到if语句时,判断条件表达式1是否成立。如果条件表达式的值为True,则执行内嵌的语句序列1; 如果条件表达式的值为False,则依次判断每个elif条件表达式是否成立,如果表达式值为True,则运行其下面的语句序列,如果所有的条件表达式都不成立,则执行else后面的语句序列。多分支结构的流程图如图37所示。 图37多分支结构的流程图 下面是一个多分支程序结构程序的例子。 【例35】例31中用Python实现了BMI指数的计算,成年人BMI数值的划分标准如下: BMI低于18.5,体重过轻; BMI位于18.5~23.9,体重正常; BMI位于24~27,体重过重; BMI位于28~32,肥胖; BMI高于32,非常肥胖。编写一个根据BMI指数判断体重情况的程序,该程序为多分支结构设计。代码如下: B=float(input("请输入您的BMI指数:"))#输入BMI指数 #通过多分支结构判断体重等级 if B>32: # BMI高于32,非常肥胖 print("您的体重评定等级是非常肥胖") elif B<=32 and B>=28: # BMI位于28~32之间,肥胖 print("您的体重评定等级是肥胖") elif B<=27 and B>=24: # BMI位于24~27之间,体重过重 print("您的体重评定等级是过重") elif B<=23.9 and B>=18.5: # BMI位于18.5~23.9之间,体重正常 print("您的体重评定等级是正常") else: # BMI低于18.5,体重过轻 print("您的体重评定等级是过轻") 上述代码的输出结果如图38所示。 图38例35运行结果 上面的程序也可以通过分支结构嵌套实现,代码如下: B=input("请输入您的BMI指数: ")#输入BMI指数 #通过分支语句嵌套判断体重等级 if B>32: # BMI高于32,非常肥胖 print("您的体重评定等级是非常肥胖") if B>=28: # BMI位于28~32之间,肥胖 print("您的体重评定等级是肥胖") if B>=24: # BMI位于24~27之间,体重过重 print("您的体重评定等级是过重") if B>=18.5: # BMI位于18.5~23.9之间,体重正常 print("您的体重评定等级是正常") elif: # BMI低于18.5,体重过轻 print("您的体重评定等级是过轻") 3.2.4pass语句 在Python程序设计中,pass语句的作用相当于空语句,当暂时没有确定如何实现功能时,可以使用pass语句来进行“占位”。例如以下程序: x=0 a=input("输入a的值") b=input("输入b的值") if a<b: pass#如果a的值小于b的值,那么执行pass语句 else: x=a #如果a的值大于等于b的值,那么将a的值赋给x print(x) 3.2.5try...except语句 在Python程序设计中,try...except语句可以用来进行对程序运行异常的检测与处理。 try...except语句格式如下: try: 被检测的语句序列 except<异常名>: 异常处理语句序列 例如以下程序: try: x=1/0 except ZeroDivisionError:#除数为0异常 print("除数为0") 3.3循 环 结 构 循环结构是指程序在执行的过程中,其中的某段语句序列被重复执行若干次。Python程序设计提供了for循环和while循环。 3.3.1while语句 while语句即while循环,其语句格式如下: while 表达式: 语句序列 while循环程序结构程序功能: 程序每次运行到“while 表达式: ”语句时,判断条件表达式是否成立。如果条件表达式的值为True,则反复执行循环体内的语句序列; 如果条件表达式的值为False,则循环结束。while循环结构的流程图如图39所示。 下面是一个while循环程序结构程序的例子。 【例36】编写一个计算1+2+3+…+100的程序,该程序用while循环结构设计。代码如下: total=0#变量total用来保存最终的和 number=1 #变量number用来保存1~100的整数 while number<=100: #求1~100的和 total=total+number number=number+1 print("1到100之和为:",total) 上述代码的输出结果如图310所示。 图39while循环结构的流程图 图310例36运行结果 注意: 如果程序每次运行到while语句时,表达式的值都为真,则该程序为死循环,程序运行将无法结束。例如以下程序: total=0 number=1 #由于number始终等于1,表达式"number<=100"始终为真,该循环为死循环 while number<=100: total=total+number print("1到100之和为:",total) 3.3.2for语句 for语句即for循环,其语句格式如下: for 变量 in 序列: 语句序列 for循环程序结构程序的功能: 变量遍历序列中的每个值。每取一个值,如果这个值在序列中,则执行语句序列,返回后,再取下一个值,再判断,直到遍历完成,退出循环。序列可以是列表、元组或字符串。 下面是一个for循环结构程序的例子。 【例37】编写一个计算1+2+3+…+10和的程序,该程序用for循环结构设计。代码如下: total=0#变量total用来保存最终的和 for x in [1,2,3,4,5,6,7,8,9,10]: #变量x用来循环控制 total=total+x print("1到10之和为:",total) 上述代码的输出结果如图311所示。 图311例37运行结果 例37程序也可以根据range()函数来设计(关于函数见第4章)。代码如下: total=0#变量total用来保存最终的和 for x in range(1,11): #变量x用来循环控制 total=total+x print("1到10之和为:",total) 提示: 范围函数range(start,stop[,step])所表示的计数范围从start开始,到stop-1结束,step为计数变化的步长值,默认为1。例如: 上面程序中的range(1,10)的步长值为1,表示1~10的整数。 3.3.3循环嵌套结构 Python程序设计允许在一个循环体中嵌入另一个循环体,对于while循环和for循环,两种循环语句可以自身嵌套,也可以相互嵌套,嵌套的层次没有限制。循环嵌套执行时,每执行一次外层循环,其内层循环必须在循环执行结束后,才能进入到外层循环的下一次循环中。在设计嵌套程序时,注意在一个循环体内包含另一个完整的循环结构。 【例38】编写一个输出由“*”组成的直角三角形(9行)的程序,该程序为循环嵌套结构设计。代码如下: for i in range(1,10):#range(1,10)表示1~9的整数 for j in rang(1,i+1): #range(1,i+1)表示1~i的整数 print("*",end="\t") #行中每个值以"\t"隔开,"\t"为制表符 print() #换行 【例39】参照例38,可以编写一个输出“9×9乘法表”的程序。代码如下: for i in range(1,10):#range(1,10)表示1~9的整数 for j in rang(1,i+1): #range(1,i+1)表示1~i的整数 print(i*j,end="\t") #行中每个值以"\t"隔开,"\t"为制表符 print() #换行 上述代码的输出结果如图312所示。 图312例39运行结果 提示: 例39也可以用while循环嵌套来实现。代码如下: i=1 while i<=9:#外层循环 j=1 while j<=i: #内层循环的终点是一个变化的量 print(i*j,end="\t") j=j+1 #内层循环变量的变化 i=i+1 #外层循环变量的变化 print() 3.3.4break和continue语句 break语句和continue语句都可以放在循环体内,通常放在循环体内的分支语句结构中。break语句的作用是结束当前循环,使得整个循环提前结束; continue语句的作用是忽略continue之后的语句,提前回到下一次循环。具体的流程变化如图313所示。 图313break语句和continue语句流程示意图 break语句和continue语句的用法如下: i=1 while i<10: i=i+1 if i%2!=0:#奇数时跳过输出 continue print(i) #偶数时输出 i=1 while 1: #循环条件为真 print(i) i=i+1 if i>10: #当i值大于10时,循环结束 break 注意: 当程序设计为死循环,然后中途判断用break退出循环时,称为半路循环。例如以下程序: a=-1 while 1: a +=1 if a==10: break 本 章 小 结 本章主要介绍了Python程序设计中的顺序结构、分支结构和循环结构3种控制结构,以及3种结构中可以用到的pass语句、break语句和continue语句。通过对本章的学习,能够掌握Python程序设计的基本语法和基本思路,为后续章节的学习打下良好的基础。