1、4 Python程序的流程第4章 Python程序的流程 本章内容本章内容 程序设计程序设计流程流程 分支分支结构结构 循环结构循环结构 流程流程控制的其他控制的其他语句语句 流程流程控制语句的应用控制语句的应用4.1 程序设计流程 结构化程序设计是一种 面向过程的编程方法,使用程序流程图、PAD图、N-S图等作为辅助设计工具。程序程序流程图流程图 应用广泛的程序设计表示工具,也称为程序框图。独立于任何一种程序设计语言。构成程序流图的基本图例如下。4.1 程序设计流程 结构化程序设计基本流程结构化程序设计基本流程 3种基本流程:顺序结构、分支结构和循环结构 顺序结构是语句按照书写的顺序依次执行
2、 分支结构又称为选择结构,根据计算所得的表达式的值来判断应选择执行哪一个流程的分支 循环结构则是在一定条件下反复执行一段语句的流程结构。4.2 分支结构 按分支的条件划分 如果是一个条件,形成简单分支结构;如果是两个条件,形成选择选择的分支结构;如果是多个条件,形成多重分支结构。1 简单简单分支结构:分支结构:if语句语句if :如果条件表达式的取值为True,则执行if分支的语句块statements 否则,绕过if分支直接执行if语句块后面的其他语句。4.2 分支结构 if-else语句实现选择语句实现选择分支分支if :else:如果boolCondition的取值为True,则执行if
3、分支的statements1语句块,否则执行else分支的statements2语句块。if-elif-else语句语句实现多分支实现多分支 只执行第1个条件为True的语句块。如果所有条件均为False,执行else后面的语句块,else分支是可选的。if :elif :else:4.2 分支结构 分支的嵌套分支的嵌套 是指分支中还存在分支的情况,即if语句中还包含着if语句。4.3 循环结构 遍历循环:遍历循环:for语句语句 for循环结构for in:var是一个变量,seq是一个序列。for循环的执行次数是由遍历结构中元素个数决定。经常使用的遍历方式如下。有限次遍历:for i in
4、 range(n):#n为遍历次数 遍历文件:for line in myfile:#myfile为文件的引用 遍历字符串:for ch in mystring:#mystring为字符串的引用 遍历列表:for item in mylist:#mylist为列表的引用4.3 循环结构 range()函数函数 用于创建一个整数列表,用在for循环中。range(start,stop,step)start:计数从start开始。默认是从0开始。end:计数到end结束,但不包括end。step:步长,默认为1。例4-4 range()函数的应用。for循环示例循环示例 例4-5 for循环示例,
5、计算1100能被3整除的数之和 例4-6 for循环的示例,程序的功能是计算1!+2!+n!。4.3 循环结构 条件循环:条件循环:while语句语句根据初始条件进行循环,当条件不满足时,循环结束。while:其中boolCondition为布尔表达式,statements语句块是循环体。执行过程是先判断逻辑表达式的值,若为True,则执行循环体,循环体执行完之后再转向逻辑表达式并做计算与判断;当计算出逻辑表达式的值为False时,跳过循环体执行while语句后面循环体外的语句。例4-7 while循环示例。4.3 循环结构 循环的嵌套循环的嵌套 无论是for循环还是while循环,其中都可以
6、再包括循环,从而构成了循环的嵌套。1#ex0408.py 2 k=eval(input(请输入阶乘的数值:)3 sum1=0 4 for i in range(1,k):5 t=1 6 for j in range(1,i+1):7 t*=j 8 sum1+=t 9 print(sum1)4.4 流程控制的其他语句流程控制的其他语句 跳跳转转语句语句 用来实现程序执行过程中流程的转移,包括break语句和continue语句。break语句 break语句的作用是循环体内部跳出,即结束循环。例例4-10 break语句示例,求语句示例,求99的最大的最大真约数真约数。1#ex0410.py 2
7、 a=eval(input(请输入数值:)3 i=a/2#等价于i=int(a/2)4 while i0:5 if a%i=0:break 6 i-=1 7 print(a,的最大真约数为:,i)4.4 流程流程控制的其他语句控制的其他语句 continue语句必须用于循环结构中,作用是终止本轮循环,直接进入下一轮循环。也称为短路语句,只对本次循环短路,并不终止整个循环。例例4-11 continue语句示例,求输入数语句示例,求输入数值中正数之和,负数忽略。值中正数之和,负数忽略。1#ex0411.py 2 s=0 3 for i in range(6):4 x=eval(input(输入输
8、入数值数据:数值数据:)5 if x0:continue 6 s+=x 7 8 print(正数之和是:正数之和是:,s)4.4 流程控制的其他语句流程控制的其他语句 pass语句语句 空语句,主要是为了保持程序结构的完整性设计的。一般用做占位语句,该语句不影响其后面语句的执行。右边的例子,如果省略pass语句,运行结果没有任何变化 例例4-12 pass语句示例,打印列表中的语句示例,打印列表中的奇数。奇数。1#ex0412.py 2 for i in 1,4,7,8,9:3 if i%2=0:4 pass 5 print(pass语句处将来可以添加语句处将来可以添加偶数处理的代码偶数处理的
9、代码)6 continue 7 print(奇数奇数,i)3.5 流程控制的其他语句流程控制的其他语句 循环结构中的循环结构中的else语句语句 else语句主要用在分支结构中。Python中的for循环、while循环、异常处理结构中也用else语句。循环中的else语句在循环正常结束后被执行。注意,如果有break语句,也会跳过else语句块。例例3-15 循环结构中使用循环结构中使用else语句。语句。str1=Hi,Pythonfor ch in str1:print(ch,end=)else:print(字符串遍历结束字符串遍历结束)3.6 流程控制语句的应用 用蒙特卡罗方法计算圆周
10、率。用蒙特卡罗方法计算圆周率。蒙特卡罗使用随机数和概率来解决问题,在计算数学、物理和化学等方面有广泛的应用。为了使用蒙特卡罗方法来计算圆周率,画一个圆的外接正方形。假设圆的半径是1,那么圆的面积是,外接正方形的面积是4。任意产生正方形内的一个点,该点落在圆内的概率是:圆面积/正方形面积,即/4。3.6 流程控制语句的应用 例例4-15 用蒙特卡罗方法计算圆周率用蒙特卡罗方法计算圆周率。1#ex0415.py 2 import random 3 NUMBER=100000 4 n=0 5 for i in range(NUMBER):6 x=random.random()*2-1 7 y=ran
11、dom.random()*2-1 8 if(x*x+y*y)=1):9 n+=110 pi=4.0*n/NUMBER11 print(使用蒙特卡罗方法计算圆周率的值是:,pi)在正方形内随机产生10000个点,落在圆内点的数量用n表示。因此,n的值约是10000*/4。可以估算的值约为4*n/10000。小结 结构化程序设计使用程序流程图、结构化程序设计使用程序流程图、PAD图、图、N-S图等作为设计工具,图等作为设计工具,结构化程序设计包括顺序结构、分支结构和循环结构结构化程序设计包括顺序结构、分支结构和循环结构3种流程。种流程。if语句来实现分支结构语句来实现分支结构,for语句和语句和w
12、hile语句实现循环结构。分支和语句实现循环结构。分支和循环都可以嵌套。循环都可以嵌套。跳转语句包括跳转语句包括break语句和语句和continue语句,语句,break语句的作用是循环语句的作用是循环体内部跳出,体内部跳出,continue语句必须用于循环结构中,它的作用是跳过语句必须用于循环结构中,它的作用是跳过当前的循环,进入下一轮循环当前的循环,进入下一轮循环。pass 语句的含义是空语句,主要是为了保持程序结构的完整性设计语句的含义是空语句,主要是为了保持程序结构的完整性设计的的。作业:(1)给定某一字符串)给定某一字符串s,对其中的每一字符,对其中的每一字符c大小写转换:如果大小
13、写转换:如果c是大写字母,是大写字母,则将它转换成小写字母;如果则将它转换成小写字母;如果c是小写字母,则将它转换成大写字母;如果是小写字母,则将它转换成大写字母;如果c不不是字母,则不转换。是字母,则不转换。(2)输入一个整数,将各位数字反转后输出。)输入一个整数,将各位数字反转后输出。(3)计算)计算12-22+32-42+972-982+992。(4)一个数如果恰好等于它的因子这和,这个数就称为)一个数如果恰好等于它的因子这和,这个数就称为“完数完数”,例如,例如,6的的因子为因子为1,2,3,而而6=1+2+3,因此,因此6就是就是“完数完数”。编程找出。编程找出100内的所有完数内的所有完数。(5)输入两个正整数)输入两个正整数m和和n,求其最大公约数和最小公倍数。,求其最大公约数和最小公倍数。提示:在循环中,只要除数不等于提示:在循环中,只要除数不等于0,用较大数除以较小的数,将小的一个数作,用较大数除以较小的数,将小的一个数作为下一轮循环的大数,取得的余数作为下一轮循环的较小的数,如此循环直到为下一轮循环的大数,取得的余数作为下一轮循环的较小的数,如此循环直到较小的数的值为较小的数的值为0,返回较大的数,此数即为最大公约数,最小公倍数为两数之,返回较大的数,此数即为最大公约数,最小公倍数为两数之积除以最大公约数。积除以最大公约数。