Python语言程序设计(第2版)(含视频教学) 课件 第3、4章 选择结构、循环结构_第1页
Python语言程序设计(第2版)(含视频教学) 课件 第3、4章 选择结构、循环结构_第2页
Python语言程序设计(第2版)(含视频教学) 课件 第3、4章 选择结构、循环结构_第3页
Python语言程序设计(第2版)(含视频教学) 课件 第3、4章 选择结构、循环结构_第4页
Python语言程序设计(第2版)(含视频教学) 课件 第3、4章 选择结构、循环结构_第5页
已阅读5页,还剩70页未读 继续免费阅读

下载本文档

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

文档简介

第3章选择结构条件的描述选择结构的实现条件运算选择结构程序举例3.1.1关系运算Python的关系运算符有:<(小于)、<=(小于等于)、>(大于)、>=(大于等于)、==(等于)、!=(不等于)关系运算符用于两个量的比较判断。由关系运算符将两个表达式连接起来的式子就称为关系表达式,它用来表示条件,其一般格式为:表达式1关系运算符表达式2例如,i+j==k,a<b+c。3.1条件的描述3.1.2逻辑运算1.逻辑运算符Python的逻辑运算符有:and(逻辑与)、or(逻辑或)、not(逻辑非)其中and和or运算符要求有两个运算量,用于连接两个条件,构成更复杂的条件。not运算符只作用于后面的一个逻辑量。2.逻辑表达式逻辑表达式是用逻辑运算符将逻辑量连接起来的式子。除not以外,and和or构成的逻辑表达式一般形式为:P逻辑运算符Q其中P,Q是两个逻辑量。例写出下列条件。(1)判断年份year是否为闰年。(2)判断ch是否为小写字母。(3)判断m能否被n整除。(4)判断ch既不是字母也不是数字字符。条件1:(year%4==0andyear%100!=0)oryear%400==0条件2:ch>='a'andch<='z'条件3:m%n==0或m-m/n*n==0条件4:not((ch>='A'andch<='Z')or(ch>='a'andch<='z')or(ch>='0'andch<='9'))3.逻辑运算的重要规则逻辑与(and)和逻辑或(or)运算分别有如下性质:(1)aandb:当a为False时,不管b为何值,结果为False。(2)aorb:当a为True时,不管b为何值,结果为True。对于aandb,当a的可解释为False,则表达式值为False,否则表达式的值为b;对于aorb,如果a为False,则表达式的值为b,否则表达式值为True。3.1.3测试运算1.成员测试in运算符用于在指定的序列中查找某个值是否存在,存在返回True,否则返回False。该运算符的使用格式是xiny,如果x在y序列中则返回True,否则返回False。例如:>>>3in(20,15,3,14,5)True“notin”的含义是,如果在指定的序列中没有找到值,则返回True,否则返回False。对于xnotiny,如果x不在y序列中返回True,否则返回False。例如:>>>3notin(20,15,3,14,5)False2.身份测试身份运算符用于测试两个变量是否指向同一个对象。例如:>>>a=20>>>b=20>>>aisbTrue>>>aisnotbFalse3.2.1单分支选择结构可以用if语句实现单分支选择结构,其一般格式为:if表达式:语句块3.2选择结构的实现单分支if语句的执行过程注意:(1)在if语句的表达式后面必须加冒号。(2)因为Python把非0当作真,0当作假,所以表示条件的表达式不一定必须是结果为True或False的关系表达式或逻辑表达式,可以是任意表达式。(3)if语句中的语句块必须向右缩进,语句块可以是单个语句,也可以是多个语句。当包含两个或两个以上的语句时,语句必须缩进一致,即语句块中的语句必须上下对齐。(4)如果语句块中只有一条语句,if语句也可以写在同一行上。例3-2输入两个整数a和b,先输出较大数,再输出较小数。分析:输入a,b,如果a<b,则交换a和b,否则不交换,最后输出a,b。程序如下:a,b=eval(input("输入a,b:"))ifa<b:#若a<b,交换a和b,否则不交换a,b=b,aprint(f"{a},{b}")3.2.2双分支选择结构可以用if语句实现双分支选择结构,其一般格式为:if表达式:语句块1else:语句块2双分支if语句的执行过程例输入三角形的三个边长,求三角形的面积。分析:设a,b,c表示三角形的三个边长,则构成三角形的充分必要条件是任意两边之和大于第三边,即a+b>c,b+c>a,c+a>b。如果该条件满足,则可按照海伦公式计算三角形的面积:其中p=(a+b+c)/2。frommathimport*a,b,c=eval(input("a,b,c="))ifa+b>canda+c>bandb+c>a:p=(a+b+c)/2s=sqrt(p*(p-a)*(p-b)*(p-c))print(f"a={a},b={b},c={c}")print(f"area={s}")else:print(f"a={a},b={b},c={c}")print("inputdataerror")例输入x,求对应的函数值y。分析:这是一个具有两个分支的分段函数,为了求函数值,可以采用双分支结构来实现。frommathimport*x=eval(input("x="))ifx<0:y=log(-5*x)+fabs(x)else:y=sin(x)+sqrt(x+exp(2))/(2*pi)print(f"x={x},y={y}")还可以采用两个单分支结构来实现,程序如下:frommathimport*x=eval(input("x="))ifx<0:y=log(-5*x)+fabs(x)ifx>=0:y=sin(x)+sqrt(x+exp(2))/(2*pi)print(f"x={x},y={y}")第一个if语句能否不写,并分析原因。第二个if语句能否不用,并分析原因。3.2.3多分支选择结构多分支if语句的一般格式为:if表达式1:

语句块1elif表达式2:语句块2elif表达式3:语句块3……elif表达式m:语句块m[else:语句块n]多分支if选择结构的执行过程例输入学生的成绩,根据成绩进行分类,85以上为优秀,70~84为良好,60~69为及格,60以下为不及格。分析:将学生成绩分为四个分数段,然后根据各分数段的成绩,输出不同的等级。程序分为四个分支,可以用四个单分支结构实现,也可以用多分支if语句实现。程序如下:g=float(input("请输入学生成绩:"))ifg<60:print("不及格")elifg<70:print("及格")elifg<85:print("良好")else:print("优秀")语句二:if表达式1:if表达式2:语句块1else:语句块23.2.4选择结构的嵌套if语句中可以再嵌套if语句,例如,有以下不同形式的嵌套结构。语句一:if表达式1:if表达式2:语句块1else:语句块2Python的条件运算有三个运算量,其一般格式为:表达式1if表达式else表达式2条件运算的运算规则是,先求if后面表达式的值,如果其值为True,则求表达式1,并以表达式1的值为条件运算的结果。如果if后面表达式的值为False,则求表达式2,并以表达式2的值为条件运算的结果。例如,z=xifx>yelsey。3.3条件运算例生成3个两位随机整数,输出其中最大的数。这里用条件运算表达式来实现,程序如下:importrandomx=random.randint(10,99)y=random.randint(10,99)z=random.randint(10,99)max=xifx>yelseymax=maxifmax>zelsezprint(f"x={x},y={y},z={z}".format(x,y,z))print(f"max={max}")例输入一个整数,判断它是否为水仙花数。所谓水仙花数,是指这样的一些三位整数:各位数字的立方和等于该数本身,例如153=13+53+33,因此153是水仙花数。分析:关键的一步是先分别求三位整数个位、十位、百位数字,再根据条件判断该数是否为水仙花数。3.4选择结构程序举例例输入一个时间(小时:分钟:秒),输出该时间经过5分30秒后的时间。例硅谷公司员工的工资计算方法如下:(1)工作时数超过120小时者,超过部分加发15%。(2)工作时数低于60小时者,扣发700元。(3)其余按每小时84元计发。输入员工的工号和该员工的工作时数,计算应发工资。分析:为了计算应发工资,首先分两种情况,即工时数小于等于120小时和大于120小时。工时数超过120小时时,实发工资有规定的计算方法。而工时数小于等于120小时时,又分为大于60和小于等于60两种情况,分别有不同的计算方法。所以程序分为3个分支,即工时数>120、60<工时数≤120和工时数≤60,可以用多分支if结构实现,也可以用if的嵌套实现。例输入年月,求该月的天数。分析:用year、month分别表示年和月,day表示每月的天数。考虑到以下两点。(1)每年的1、3、5、7、8、10、12月,每月有31天;4、6、9、11月,每月有30天;闰年2月有29天,平年2月有28天。(2)年份能被4整除,但不能被100整除,或者能被400整除的年均是闰年。第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[

温馨提示

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

评论

0/150

提交评论