1、单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,第,4,章,程序的控制结构,1,程序的循环结构,2,根据循环执行次数的确定性,,分,为确定次数循环和非确定次数循,环,确,定次数循环指循环体对循环次数有明确的定义,这类循环在,Python,中被称为,“,遍历循环,”,,其中,循环次数采用遍历结构中元素个数来体现,具体采用,for,语句实现,。,非,确定次数循环指程序不确定循环体可能的执行次数,而通过条件判断是否继续执行循环体,,Python,提供了根据判断条件执行程序的无限循环,具体采用,while,语句实现,。,程序的循环结构,Python,通过保留字,fo
2、r,实现,“,遍历循环,”,,基本使用方法如下:,for in :,之所以称为,“,遍历循环,”,,是因为,for,语句的循环执行次数是根据遍历结构中元素个数确定的。遍历循环可以理解为从遍历结构中逐一提取元素,放在循环变量中,对于每个所提取的元素执行一次语句块,。,遍历循环,:for,语句,遍历结构可以是字符串、文件、组合数据类型或,range(),函数,常用的使用方式如,下,循环,N,次,for i in range(N):,遍历文件,fi,的每一行,for line in fi:,遍历字符串,s,for c in s:,遍历循环,:for,语句,遍历循环还有一种扩展模式,使用方法如下:,f
3、or in :,else:,遍历循环,:for,语句,在这种扩展模式中,当,for,循环正常执行之后,程序会继续执行,else,语句中内容。,else,语句只在循环正常执行之后才执行,因此,可以在,中放置判断循环执行情况的语句,。,这里先给一个小例子,:,遍历循环,:for,语句,很多应用很难在执行之初就有确定的遍历结构,这需要编程语言提供根据条件进行循环的语法,称为无限循环,又称条件循环,。,无,限循环一直保持循环操作直到特定条件被满足才结束,不需要提前知道循环次数,。,无限循环,:while,语句,Python,通过保留字,while,实现无限循环,基本使用方法如下:,while :,其中
4、与,if,语句中的判断条件一样,结果为,True,和,False,。,无限循环,:while,语句,在这种扩展模式中,当,while,循环正常执行之后,程序会继续执行,else,语句中内容。,else,语句只在循环正常执行之后才执行,因此,可以在,中放置判断循环执行情况的语句,例如:,无限循环,:while,语句,程序执行后的效果如下,:,如,果通过,while,实现一个计数循环,需要在循环之前对计数器,idx,进行初始化,并在每次循环中对计数器,idx,进行累加,如上述代码第,4,行。相比,for,循环,循环变量逐一取自遍历结构,不需要程序维护计数,器,无限循环,:while,语句,循环结
5、构有两个辅助保留字:,break,和,continue,,它们用来辅助控制循环执行。,break,用来跳出最内层,for,或,while,循环,脱离该循环后续执行,例,如,循环保留字,:break,和,continue,其中,,break,语句跳出了最内层,for,循环,但仍然继续执行外层循环。每个,break,语句只有能力跳出当前层次循环。,continue,用来结束当前当次循环,即跳出循环体中下面尚未执行的语句,但不跳出当前循环。对于,while,循环,继续求解循环条件。而对于,for,循环,程序流程接着遍历循环列表,。,循环保留字,:break,和,continue,对比,continu
6、e,和,break,语句,如下,:,循环保留字,:break,和,continue,两,个程序执行后的效果分别,为,PYHON,PY,random,库的使用,15,随机数在计算机应用中十分常,见,Python,内置的,random,库主要用于产生各种分布的伪随机数序,列,random,库采用梅森旋转算法(,Mersenne twister,)生成伪随机数序列,可用于除随机性要求更高的加解密算法外的大多数工程应用,。,random,库概述,使用,random,库主要目的是生成随机数,因此,读者只需要查阅该库的随机数生成函数,找到符合使用场景的函数使用即可。这个库提供了不同类型的随机数函数,所有函
7、数都是基于最基本的,random.random(),函数扩展而来。,random,库概述,random,库解析,random,库常用的,9,个随机数生成函数,函数,描述,函数,seed(a=None),初始化随机数种子,默认值为当前系统时间,seed(a=None),random(),生成一个,0.0,1.0),之间的随机小数,random(),randint(a,b),生成一个,a,b,之间的整数,randint(a,b),getrandbits(k),生成一个,k,比特长度的随机整数,getrandbits(k),randrange(start,stop,step),生成一个,start,
8、stop),之间以,step,为步数的随机整数,randrange(start,stop,step),uniform(a,b),生成一个,a,b,之间的随机小数,uniform(a,b),choice(seq),从序列类型,(,例如:列表,),中随机返回一个元素,choice(seq),shuffle(seq),将序列类型中元素随机排列,返回打乱后的序列,shuffle(seq),sample(pop,k),从,pop,类型中随机选取,k,个元素,以列表类型返回,sample(pop,k),对,random,库的引用方法与,math,库一样,,可采,用下面两种方式实,现,import rand
9、om,或,from random import*,使用,random,库的一些例子如下,请读者注意,这些语句每次执行后的结果不一定一样:,random,库解析,random,库解析,生成随机数之前可以通过,seed(),函数指定随机数种子,随机种子一般是一个整数,只要种子相同,每次生成的随机数序列也相同。这种情况便于测试和同步数据,例如,:,random,库解析,的计算,22,的计算,随着计算机的出现,数学家找到了另类求解,的方法:蒙特卡罗(,Monte Carlo,)方法,又称随机抽样或统计试验方法,。,当,所要求解的问题是某种事件出现的概率,或者是某个随机变量的期望值时,它们可以通过某种,
10、试验,”,的方法,得到这种事件出现的频率,或者这个随机变数的平均值,并用它们作为问题的解。这就是蒙特卡罗方法的基本思想。,的计算,应用蒙特卡罗方法求解,的基本步骤如下:随机向单位正方形和圆结构,如图,4.10,所示,抛洒大量,“,飞镖,”,点,计算每个点到圆心的距离从而判断该点在圆内或者圆外,用圆内的点数除以总点数就是,/4,值,的计算,为了简化计算,一般利用图形的,1/4,求解,值,如图,4.11,所示。该问题的,IPO,表示如下,:,输入:抛点数,处理:计算每个点到圆心的距离,统计在圆内点的数量,输出:,值,的计算,的计算,上述代码中,,random(),函数随机返回一个在,0,1),
11、之间的浮点数,用两个随机数给出随机抛点,(x,y),的坐标。,sqrt(),函数来自于数学库,math,,用来求解输入数据的平方根。第一次调用,clock(),函数启动一个新的计时器,第二次调动,clock(),函数返回启动计时器后的时间,。,的计算,代码中,DARTS,是一个常量,初始设定这个抛点数为,1000,。该程序运行结果如下:,Pi,值是,3.144.,运行时间是,:,0.016477s,计算得到的,值为,3.144,,与大家熟知的,3.1415,相差较远。原因是,DARTS,点数量较少,无法更精确刻画面积的比例关系,。,的计算,表,4.4,列出了不同,DARTS,值情况下该程序的运
12、行情,况,,,可以看到,随着,DARTS,数量的增加,在,2,20,数量级上,,的值就相对准确了,。,DARTS,运行时间,2,10,3.109375,0.011s,2,11,3.138671,0.012s,2,12,3.150390,0.014s,2,13,3.143554,0.018s,2,14,3.141357,0.030s,2,15,3.147827,0.049s,2,16,3.141967,0.116s,2,18,3.144577,0.363s,2,20,3.1426696777,1.255s,的计算,异常处理机制,31,观察下面这段小程,序,num=eval(input(,请输入一
13、个整数,:),print(num*2,),当用户输入数字时,程序正常执行,如果用户输入的不是数字呢?,异常处理,:try-except,语句,异常处理,:try-except,语句,可以看到,,Python,解释器返回了异常信息,同时程序退出,图,4.12,具体说明了这个异常信息中各部分的含义。,异常处理,:try-except,语句,Python,异常信息中最重要的部分是异常类型,它表明了发生异常的原因,也是程序处理异常的依据。,Python,使用,try-except,语句实现异常处理,基本的语法格式如下:,try:,except:,异常处理,:try-except,语句,语句块,1,是正
14、常执行的程序内容,当发生异常时执行,except,保留字后面的语句块,为这个小例子增加异常处理,代码如下:,异常处理,:try-except,语句,try-except,语句可以支持多个,except,语句,语法格式如下:,try:,except:,.,except:,except:,异常的高级用法,其中,第,1,到第,N,个,except,语句后面都指定了异常类型,说明这些,except,所包含的语句块只处理这些类型的异常。最后一个,except,语句没有指定任何类型,表示它对应的语句块可以处理所有其他异常。这个过程与,if-elif-else,语句类似,是分支结构的一种表达方式,一段代码如
15、下。,异常的高级用法,异常的高级用法,该程序将用户输入的数字作为索引从字符串,alp,中返回一个字符,当用户输入非整数字符时,,except NameError,异常被捕获到,提升用户输入类型错误,当用户输入数字不在,1,到,26,之间时,异常被,except,捕获,程序打印其他错误信息,执行过程和结果如下:,异常的高级用法,除了,try,和,except,保留字外,异常语句还可以与,else,和,finally,保留字配合使用,语法格式如下:,try:,except:,else:,finally:,异常的高级用法,此处的,else,语句与,for,循环和,while,循环中的,else,一样
16、当,try,中语句块,1,正常执行结束且没有发生异常时,,else,中语句块,3,执行,可以看作是对,try,语句块正常执行后的一种追加处理,。,finally,语句块则不同,无论,try,中语句块,1,是否发生异常,语句块,4,都会执行,可以将程序执行语句块,1,的一些收尾工作放在这里,例如关闭打开文件等,。,异常的高级用法,采用这些保留子的异常处理控制流过程如图,4.13,所,示,异常的高级用法,采用,else,和,finally,修改代码如,下,异常的高级用法,执行过程和结果如下,:,异常的高级用法,Python,能,识别很多种异常类型,但不建议读者编写程序时依赖,try-except
17、这种异常处理机制。,try-except,异常一般只用来检测极少发生的情况,例如:用户输入的合规性或文件打开是否成功等。对于本节小例子中索引字符串超过范围的情况应该尽量在程序中采用,if,语句直接判断,尽量避免通过异常处理来应对这种可能发生的“错误”,异常的高级用法,对于商业应用的软件产品,稳定性和可靠性是最重要的衡量指标之一。即使这类软件产品,也不会滥用,try-except,类型语句。因为采用,try-except,语句会影响代码的可读性,增加代码维护难度,因此,一般只在关键地方采用,try-except,类型语句处理可能发生的异常,。,没看懂,到底该什么时候该使用异常语句呢?,程序员都是对它又爱又恨,其实,想用就用吧,用户体验好才是王道,!,异常的高级用法,本章主要讲解程序的基本结构,包括分支结构和循环结构,介绍身体质量指数,BMI,的计算,用实例说明分支结构的使用。本章同时介绍了一个常用标准库,random,库,利用它实现了蒙特卡罗方法求解,的过程。最后介绍了程序的异常处理操作,。,本章小结,
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4009-655-100 投诉/维权电话:18658249818