Python语言程序设计(第2版) 课件 第4章 循环结构_第1页
Python语言程序设计(第2版) 课件 第4章 循环结构_第2页
Python语言程序设计(第2版) 课件 第4章 循环结构_第3页
Python语言程序设计(第2版) 课件 第4章 循环结构_第4页
Python语言程序设计(第2版) 课件 第4章 循环结构_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第4章循环结构while循环结构for循环结构循环控制语句循环三维嵌套循环结构程序举例Python科学计算库的应用4.1.1while语句1.while语句的一般格式while语句的一般格式为:while表达式:语句块while语句中的表达式表示循环条件,可以是结果能解释为True或False的任何表达式,常用的是关系表达式和逻辑表达式。表达式后面必须加冒号。语句块是重复执行的部分,称作循环体。4.1while循环结构while语法的执行过程注意:(1)当循环体由多个语句构成时,必须用缩进对齐的方式组成一个语句块,否则会产生错误。(2)与if语句的语法类似,如果while循环体中只有一条语句,可以将该语句与while写在同一行中。(3)如果表达式永远为True,循环将会无限地执行下去(俗称“死”循环)。在循环体内必须有修改表达式值的语句,使其值趋向False,让循环趋于结束,避免无限循环。2.在while语句中使用else子句在Python中,可以在循环语句中使用else子句,else中的语句会在循环正常执行完的情况下执行(不管是否执行循环体)。例如:count=int(input())whilecount<5:print(count,"islesshan5")count=count+1else:print(count,"isnotlessthan5")程序的一次运行结果如下:8↙8isnotlessthan54.1.2while循环的应用例计算1+2+3+……+100的值。分析:累加问题可用递推式来描述:si=si-1+ni(s0=0,n1=1),从循环的角度看即本次循环的累加和s等于上次循环的累加和加上本次的累加项n,可用赋值语句“s+=n”来实现。此例的累加项n的递推式为:ni=ni-1+1(n1=1),可用赋值语句“n+=1”来实现(n=1,2,3,……,100)。循环体要实现两种操作:s+=n和n+=1,并置s的初值为0,n的初值为1。例

求sinx近似值,直到最后一项的绝对值小于10-6时停止计算。其中x为弧度,但从键盘输入时以角度为单位。分析:这是一个累加求和问题。关键是如何求累加项,较好的办法是利用前一项来求后一项,即用递推的办法来求累加项。第i项与第i-1项之间的递推关系为:

a1=x求sinx值的算法例输入一个整数,输出其位数。分析:输入的整数存入变量n中,用变量k来统计n的位数,基本思路是每循环一次就去掉n的最低位数字(用Python的整除运算符实现),直到n为0。4.2.1for语句1.for语句的一般格式for语句的一般格式为:for目标变量in序列对象:语句块for语句的首行定义了目标变量和遍历的序列对象,后面是需要重复执行的语句块。语句块中的语句要向右缩进,且缩进量要一致。4.2for循环结构for语句执行过程注意:(1)for语句是通过遍历任意序列的元素进行来建立循环的,针对序列的每一个元素执行一次循环体。(2)for循环的循环次数显然就是序列中元素的个数,即序列的长度。可以利用序列长度来控制循环次数。(3)目标变量的作用是存储每次循环所引用的序列元素的值,在循环体中也可以引用目标变量的值。(4)可以在for循环体中修改目标变量的值,但当程序执行流程再次回到循环开始时,就会自动被设成序列的下一个元素。退出循环之后,该变量的值就是循环中最后的值。(5)for语句也支持一个可选的else块,它的功能就像在while循环中一样,如果循环离开时没有碰到break语句,就会执行else块。2.rang对象在for循环中的应用在Python3.x中,range()函数返回的是可迭代对象。Python专门为for语句设计了迭代器的处理方法。例如:foriinrange(5):print(i,end='')程序输出结果如下:01234首先Python对关键字in后的对象调用iter()函数获得迭代器,然后调用next()函数获得迭代器的元素,直到抛出StopIteration异常。4.2.2for循环的应用例输入20个数,求出其中的最大数与最小数。分析:先假设第一个数就是最大数或最小数,再将剩下的19个数与到目前为止的最大数、最小数进行比较,比完19次后即可找出20个数中的最大数与最小数。例求Fibonacci数列的前30项。分析:设待求项(即fn)为f,待求项前面的第一项(即fn-1)为f1,待求项前面的第二项(即fn-2)为f2。首先根据f1和f2推出f,再将f1作为f2,f作为f1,为求下一项作准备。如此一直递推下去。

1 1 2 3 5第一次:f2+ f1→f

↓↓第二次:f2+f1→f

↓↓第三次:f2+f1→ f例4-6输入一个整数m,判断是否为素数。分析:素数是大于1,且除了1和它本身以外,不能被其他任何整数所整除的整数。为了判断整数M是否为素数,一个最简单的办法用2、3、4、5、……、M-1这些数逐个去除M,看能否整除,如果全都不能整除,则M是素数,否则,只要其中一个数能整除,则M不是素数。当M较大时,用这种方法,除的次数太多,可以有许多改进办法,以减少除的次数,提高运行效率。可以设一个变量来作为是否素数的标志,用for语句实现程序。4.3.1break语句break语句用在循环体内,迫使所在循环立即终止,即跳出所在循环体,继续执行循环结构后面的语句。4.3循环控制语句例求两个整数a与b的最大公约数。分析:找出a与b中较小的一个,则最大公约数必在1与较小整数的范围内。使用for语句,循环变量i从较小整数变化到1。一旦循环控制变量i同时整除a与b,则i就是最大公约数,然后使用break语句强制退出循环。4.3.2continue语句当在循环结构中执行continue语句时,立即结束本次循环,重新开始下一轮循环。例求1~100之间的全部奇数之和。x=y=0whileTrue:x+=1ifnot(x%2):continue#x为偶数直接进行下一次循环elifx>100:break #x>100时退出循环else:y+=x#实现累加print("y=",y)4.3.3pass语句pass语句是一个空语句,它不做任何操作,代表一个空操作。看下面的循环语句。forxinrange(10):pass该语句的确会循环10次,但是除了循环本身之外,它什么也没做。4.4循环的嵌套如果一个循环结构的循环体又包括一个循环结构,就称为循环的嵌套,或称为多重循环结构。例输入n,求表达式的值。分析:这是求n项之和的问题。先求累加项a,再用语句“s=s+a”实现累加,共有n项,所以共循环n次。求累加项a时,分母又是求和问题,也可以用一个循环来实现。因此整个程序构成一个二重循环结构。例4输出[100,1000]以内的全部素数。分析:可分为以下两步。(1)判断一个数是否为素数。(2)将判断一个数是否为素数的程序段,对指定范围内的每一个数都执行一遍,即可求出某个范围内的全部素数。这种方法称为穷举法,也叫枚举法4.5循环结构程序举例例已知y,求:(1)y<3时的最大n值。(2)与(1)的n值对应的y值。分析:这是一个累加求和问题,循环条件是累加和y≥3,用N-S图表示算法如图所示。当退出循环时,y的值已超过3,因此要减去最后一项,n的值相应也要减去1。又由于最后一项累加到y后,n又增加了1,故n还要减去1,即累加的项数是n-2。求y值的算法思考:(1)求y≥3时的最小n,如何修改程序?(2)求y的值,直到累加项小于10-6为止,如何修改程序?(3)n取100,求y的值,如何修改程序?例求f(x)在[a,b]上的定积分分析:为了求得图形面积,先将区间[a,b]分成n等分,每个区间的宽度为h=(b-a)/n,对应地将图形分成n等分,每个小部分近似一个小曲边梯形。近似求出每个小曲边梯形面积,然后将n个小曲边梯形的面积相加,就得到总面积,即定积分的近似值。n越大,近似程度越高。这就是函数的数值积分方法。近似求每个小曲边梯形的面积,常用的方法有:(1)用小矩形代替小曲边梯形,求出各个小矩形面积,然后累加。此种方法称为矩形法。(2)用小梯形代替小曲边梯形,此种方法称为梯形法。(3)用抛物线代替该区间的f(x),然后求出抛物线与x=a+(i-1)h,x=a+ih,y=0围成的小曲边梯形面积,此种方法称为辛普生法。以梯形法为例,求解方法如图所示。第一个小梯形的面积为:第二个小梯形的面积为:……第n个小梯形的面积为:例用牛顿迭代法求方程f(x)=2x3-4x2+3x-7=0在x=2.5附近的实根,直到满足|xn-xn-1|≤10-6为止。分析:迭代法的关键是确定迭代公式、迭代的初始值和精度要求。牛顿切线法是一种高效的迭代法,它的实质是以切线与x轴的交点作为曲线与x轴交点的近似值以逐步逼近解,如图所示。牛顿迭代法牛顿迭代公式为:

4.6Python科学计算库的应用4.6.1NumPy库的应用1.第三方库的安装pipinstall第三方库的名字以安装NumPy库为例,安装界面如图所示。第三方库安装好了以后,需要导入才能使用,导入方法和标准模块导入方法一样。通常用以下方式导入NumPy库,其中np是numpy的别名,在后续命令中np就代表numpy。>>>importnumpyasnp。2.NumPy数组的操作NumPy库中基础的数据类型是同类型元素构成的数组,称为ndarray多维数组对象。(1)创建NumPy数组。创建NumPy数组的方法有很多。例如,可以使用array()函数由Python的序列对象创建NumPy数组,NumPy数组可以直接参与各种运算,运算结果也是数组。(2)创建一维数组的两个常用函数。NumPy库中的arange()函数和linspac()函数可以创建一维数组,一般调用格式为:arange([start,]end[,step])linspace(start,end[,num=50][,endpoint=True])(3)数据统计函数。NumPy库还提供了许多数据统计函数,例如求和sum()、求平均值函数mean()、求积函数prod()、求最大值函数max()、求最小值函数min(),等等。。3.利用NumPy求定积分求定积分的问题就是求n个面积之和的问题,所以可以利用NumPy的数组计算功能来求定积分。此外,NumPy还提供了trapz()函数来求定积分。该函数对离散数据形式的函数关系用梯形法来计算定积分,基本的调用格式为:trapz(y,x)其中,x为自变量向量,y为对应的函数值向量。x省略时,采用均匀间隔。例求定积分。分析:采用梯形积分法,步骤如下。(1)产生积分区间范围内的一个具有n个元素的一维数组,并求个点的被积函数值。(2)构造求n个梯形面积的表达式(这一步是关键)。(3)求n个梯形面积之和。。4.6.2SciPy库的应用1.利用SciPy求定积分可以利用egrate模块中的quad()函数来求一元函数的定积分。其基本调用格式为:quad(func,a,b)其中func是一个函数名,代表被积函数,a是积分下限,b是积分上限。quad函数返回两个值,其中第1个值是定积分值,第2个值是积分值中绝对误差的估计值。egrate模块还提供二重积分函数dblquad()、三重积分函数tplquad(),以及其他积分函数。。例用SciPy求定积分。分析:quad()函数的第一个参数代表被积函数,这里用匿名函数来定义(详见第8章)。2

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论