版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Python数据分析与科学计算第4章程序控制结构4.1程序的基本结构4.2选择结构程序设计4.3循环结构程序设计if表达式:
语句块if语句的一般格式
4.1单分支选择结构注意:(1)在if语句的表达式后面必须加冒号。(2)因为Python把非0当作真,0当作假,所以表示条件的表达式不一定必须是结果为True或False的关系表达式或逻辑表达式,可以是任意表达式。
4.1单分支选择结构(4)如果语句块中只有一条语句,if语句也可以写在同一行上。例如:(3)if语句中的语句块必须向右缩进,语句块可以是单个语句,也可以是多个语句。当包含两个或两个以上的语句时,语句必须缩进一致,即语句块中的语句必须上下对齐。例如:ifx>y:t=xx=yy=tx=10ifx>0:print(2*x-1)
4.1单分支选择结构【例4.1】输入3个整数x、y、z,请将这3个数由小到大输出。程序代码:x,y,z=eval(input(‘请输入x、y、z:’))ifx>y:x,y=y,xifx>z:x,z=z,xify>z:y,z=z,yprint(x,y,z)运行结果:请输入x、y、z:34,156,232334156形式:
if表达式:
语句块1else:语句块2语句的一般语法格式为:
4.2双分支选择结构注意:与单分支if语句一样,对于表达式后面或者else后面的语句块,应将它们缩进对齐。例如:ifx%2==0:y=x+yx=x+1else:y=2*xx=x-1
4.2双分支选择结构【例4.2】输入年份,判断是否是闰年。分析:题目的关键是判断闰年的条件,如果年份能被4整除但不能被100整除或者能被400整除,则是闰年,否则就不是闰年。程序代码:year=int(input('请输入年份:'))if(year%4==0andyear%100!=0)or(year%400==0):print(year,'年是闰年')else:print(year,'年不是闰年')运行结果:请输入年份:20172017年不是闰年再次运行程序结果如下:请输入年份:20002000年是闰年
if语句的一般格式为:if表达式1:
语句块1elif表达式2:
语句块2elif表达式3:
语句块3……elif表达式m:
语句块m[else:
语句块n]
4.3多分支选择结构
4.3多分支选择结构【例4.3】输入学生的成绩,根据成绩进行分类,85以上为优秀,70~84为良好,60~69为及格,60以下为不及格。程序代码:score=int(input("请输入学生成绩:"))ifscore<60:print("不及格")elifscore<70:print("及格")elifscore<85:print("良好")else:print("优秀")运行结果:请请输入学生成绩:83良好分析:将学生成绩分为四个分数段,然后根据各分数段的成绩,输出不同的等级。程序分为四个分支,可以用四个单分支结构实现,也可以用多分支if语句实现。
4.3多分支选择结构【例4.4】从键盘输入一个字符ch,判断它是英文字母、数字或其他字符。程序代码:ch=input("请输入一个字符:")ifch>="a"andch<="z"orch>="A"andch<="Z":print("%c是英文字母"%ch)elif
ch>="0"andch<="9":print("%c是数字"%ch)else:print("%c是其他字符"%ch)运行结果:请输入一个字符:LL是英文字母再次运行结果如下:请输入一个字符:##是其他字符分析:本题应进行三种情况的判断:(1)英文字母:ch>="a"andch<="z"orch>="A"andch<="Z"(2)数字字符:ch>="0"andch<="9"(3)其他字符。if表达式1:
if表达式2:
语句块1
else:
语句块2if语句中可以再嵌套if语句,可以有以下不同形式的嵌套结构。
4.4选择结构嵌套语句一:if表达式1:if表达式2:
语句块1else:
语句块2语句二:Python根据对齐关系来确定if之间的逻辑关系,在语句一中,else与第二个if匹配,在语句二中else与第一个if匹配。【例4.5】购买地铁车票的规定如下:乘1-4站,3元/位;乘5-9站,4元/位;乘9站以上,5元/位。输入人数、站数,输出应付款。Falsem<=4True开始输出应付款结束输入人数n、站数mm<=9pay=4*npay=5*nTrueFalse
4.4选择结构嵌套
4.4选择结构嵌套程序代码:n,m=eval(input(‘请输入人数,站数:'))ifm<=4:pay=3*nelse:ifm<=9:pay=4*nelse:pay=5*nprint('应付款:',pay)运行结果:请输入人数,站数:3,5应付款:12
4.4选择结构嵌套【例4.6】求一元二次方程
的根。程序代码:importmatha,b,c=eval(input("请输入一元二次方程的系数:"))ifa==0:print('输入错误!')else:delta=b*b-4*a*cx=-b/(2*a)ifdelta==0:print('方程有唯一解,X=%f'%(x))elifdelta>0:x1=x-math.sqrt(delta)/(2*a)x2=x+math.sqrt(delta)/(2*a)print('方程有两个实根:x1=%f,x2=%f'%(x1,x2))else:x1=(-b+complex(0,1)*math.sqrt((-1)*delta))/(2*a)x2=(-b-complex(0,1)*math.sqrt((-1)*delta))/(2*a)print('方程有两个虚根,分别是:')print(x1,x2)运行结果:请输入一元二次方程的系数:0,1,1输入错误!再次运行结果如下:请输入一元二次方程的系数:1,2,1方程有唯一解,X=-1.0000004.5选择结构程序举例【例4.7】从键盘输入一个实数,不调用math.h中的库函数计算其绝对值和平方值并输出。程序代码:a=float(input('input:'))ifa>=0:b=aelse:b=-ac=a**2print("abs=%f,square=%f"%(b,c))运行结果:input:-5abs=5.000000,square=25.0000004.5选择结构程序举例【例4.8】输入三角形的三个边长,求三角形的面积。程序代码: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('area=',s)else:print('inputdataerror')运行结果:a,b,c=3,4,5area=6.04.5选择结构程序举例【例4.9】输入一个整数,判断它是否为水仙花数。所谓水仙花数,是指这样的一些三位整数:各位数字的立方和等于该数本身,例如153=13+53+33,因此153是水仙花数。程序代码:x=int(input('请输入三位整数x:'))a=x//100b=(x-a*100)//10c=x-100*a-10*bifx==a**3+b**3+c**3:print(x,'是水仙花数')else:print(x,'不是水仙花数')运行结果:请输入三位整数x:153153是水仙花数4.5选择结构程序举例程序代码:s=int(input("请输入路程:"))ifs<250: fee=sif250<=s<500: fee=(0.98)*sif500<=s<1000: fee=(0.95)*sif1000<=s<2000: fee=(0.92)*sif2000<=s<3000: fee=(0.90)*sif3000<=s: fee=(0.85)*sprint('运费是:%.6f'%sum)【例4.10】某运输公司的收费按照用户运送货物的路程进行计算,其运费折扣标准如表4.1所示。请编写程序计算运输公司的计费。程序运行结果:请输入路程:300运费是:294.0路程(km)运费的折扣路程(km)运费的折扣s<250没有折扣1000<=s<20008%折扣250<=s<5002%折扣2000<=s<300010%折扣500<=s<10005%折扣s>=300015%折扣表4.1运输公司运费计算方法4.5选择结构程序举例x,y=eval(input("请输入x和y:"))ifx**2+y**2<=1:ifx**2+y**2==1:print("点(%f,%f)在单位圆上"%(x,y))else:print("点(%f,%f)在单位圆内"%(x,y))else:ify>=0:ify==0:print("点(%f,%f)在单位圆外,在x轴上"%(x,y))else:print("点(%f,%f)在单位圆外,在x轴上方"%(x,y))else:print("点(%f,%f)在单位圆外,在x轴下方"%(x,y))【例4.11】如图4.5所示在直角坐标系中有一个以原点为中心的单位圆,今任给一点(x,y),试判断该点是在单位圆内、单位圆上,还是单位圆外?若在单位圆外,那么是在x轴的上方、下方,还是在x轴上?程序运行结果请输入x和y:1,0点(1.000000,0.000000)在单位圆上再次运行程序,结果如下:
请输入x和y:3,-2点(3.000000,-2.000000)在单位圆外,在x轴下方再次运行程序,结果如下:请输入x和y:0.2,0.3点(0.200000,0.300000)在单位圆内
5.1while循环结构
1.while语句while条件表达式:
循环体while语句是当型循环,一般形式为:图5.1while循环流程图注意:(1)当循环体由多个语句构成时,必须用缩进对齐的方式组成一个语句块来分隔子句,否则会产生错误。(2)与if语句的语法类似,如果while循环体中只有一条语句,可以将该语句与while写在同一行中。(3)while语句的条件表达式不需要用括号括起来,表达式后面必须有冒号。(4)如果表达式永远为真,循环将会无限地执行下去。在循环体内必须有修改表达式值的语句,使其值趋向False,让循环趋于结束,避免无限循环。
5.1while循环结构
while条件表达式:
循环体else:
语句while语句中使用else子句的一般形式:while-else循环结构,else中的语句会在循环正常执行完的情况下执行(不管是否执行循环体)。count=int(input())whilecount<5:print(count,"islesshan5")count=count+1else:print(count,"isnotlessthan5")程序的一次运行结果如下:8↙8isnotlessthan52.while语句应用【例5.1】求。程序代码:sum,n=1,0whilen<=100:sum=sum+nn=n+1print("1+2+3+…+100=",sum)运行结果:1+2+3+…+100=5050
5.1while循环结构
5.1while循环结构
【例5.2】从键盘上输入若干个数,求所有正数之和。当输入0或负数时,程序结束。程序代码:sum=0x=int(input("请输入一个正整数(输入0或者负数时结束):"))whilex>=0:sum=sum+xx=int(input("请输入一个正整数(输入0或者负数时结束):"))print("sum=",sum)运行结果:请输入一个正整数(输入0或者负数时结束):13请输入一个正整数(输入0或者负数时结束):21请输入一个正整数(输入0或者负数时结束):5请输入一个正整数(输入0或者负数时结束):54请输入一个正整数(输入0或者负数时结束):0sum=92
5.1while循环结构
【例5.3】输入一个正整数x,如果x满足0<x<99999,则输出x是几位数并输出x个位上的数字。程序代码:x=int(input("Pleaseinputx:"))ifx>=0andx<99999:i=xn=0whilei>0:i=i//10n=n+1a=x%10print("%d是%d位数,它的个位上数字是%d"%(x,n,a))else:print("输入错误!")运行结果:Pleaseinputx:1234512345是5位数,它的个位上数字是5再次运行程序,结果如下:Pleaseinputx:-1输入错误!1.for语句for目标变量in序列对象:
循环体说明:for语句的首行定义了目标变量和遍历的序列对象,后面是需要重复执行的语句块。语句块中的语句要向右缩进,且缩进量要一致。
5.2for语句结构for语句的一般格式注意:(1)for语句是通过遍历任意序列的元素来建立循环的。(2)for语句也支持一个可选的else块,一般格式如下:
for目标变量in序列对象:
语句块else:语句range对象在for循环中的应用range函数返回的是可迭代对象,range()函数的一般格式为:
range([start,]end[,step])
rang()函数共有三个参数,start和step是可选的,start表示开始,默认值为0,end表示结束,step表示每次跳跃的间距,默认值为1。函数的功能是从一个start参数的值开始,到end参数的值结束的数字序列。
5.2for语句结构传递一个参数的range()函数:>>>foriinrange(5): print(i)传递两个参数的range()函数:>>>foriinrange(2,4): print(i)传递三个参数的range()函数:>>>foriinrange(2,20,3): print(i)【例5.4】用for循环求
5.2for语句结构程序代码:sum=0foriinrange(101): sum=sum+iprint(“1+2+3+....+100”,sum)说明:该例中采用range()函数得到一个从0~100的序列,变量i依次从序列中取值累加到sum变量中。2.for语句应用
5.2for语句结构【例5.5】判断m是否为素数。程序代码:m=int(input("请输入要判断的正整数m:"))flag=1foriinrange(2,m):ifm%i==0:flag=0i=m#令i为m,使i<m不成立,使不是素数时退出循环ifflag==1:print("%d是素数"%m)else:print("%d不是素数"%m)程序运行结果:请输入要判断的正整数m:1111是素数再次运行程序结果如下:请输入要判断的正整数m:2020不是素数【例5.6】已知四位数3025具有特殊性质:它的前两位数字30与后两位数字25之和是55,而55的平方正好等于其本身3025。编程列举出具有该性质的四位数。
5.2for语句结构程序代码:print(“满足条件的四位数分别是:”)foriinrange(1000,10000):
a=i//100 b=i%100 if(a+b)**2==i: print(i)程序运行结果:满足条件的四位数分别是:202530259801
【例5.7】求出1到100能被7或11整除但不能被7和11同时整除的所有整数并将它们输出。每行10个。
5.2for语句结构程序代码:print(“满足条件的数分别是:”)count=0foriinrange(1,100): ifi%7==0andi%11!=0ori%11==0andi%7!=0:
print(i,end=””) count=coun+1 ifcount%10==0: print(“”)程序运行结果:满足条件的数分别是:71114212228333542444955566366708488919899
5.3循环嵌套循环语句while和for可以相互嵌套。在使用循环嵌套时,应注意以下几个问题:(1)外层循环和内层循环控制变量不能同名,以免造成混乱。(2)循环嵌套的缩进在逻辑上一定要注意,以保证逻辑上的重要性。(3)循环嵌套不能交叉,即在一个循环体内必须完整地包含另一个循环。如果一个循环结构的循环体又包括了一个循环结构,就称为循环的嵌套。
5.3循环嵌套【例5.8】输出九九乘法表,格式如下。1*1=11*2=22*2=41*3=32*3=63*3=91*4=42*4=83*4=124*4=161*5=52*5=103*5=154*5=205*5=251*6=62*6=123*6=184*6=245*6=306*6=361*7=72*7=143*7=214*7=285*7=356*7=427*7=491*8=82*8=163*8=244*8=325*8=406*8=487*8=568*8=641*9=92*9=183*9=274*9=365*9=456*9=547*9=638*9=729*9=81foriinrange(1,10,1):#控制行
forjinrange(1,i+1,1):#控制列
print("%d*%d=%2d"%(j,i,i*j),end="")print("")#每行末尾的换行
5.3循环嵌套【例5.9】找出所有的三位数,要求它的各位数字的立方和正好等于这个三位数。例如:153=13+53+33就是这样的数。程序代码:foriinrange(1,10):forjinrange(0,10):forkinrange(0,10):ifi**3+j**3+k**3==i*100+j*10+k:print("%d%d%d"%(i,j,k))程序运行结果:153370371407【例5.10】求100~200之间的全部素数。
5.3循环嵌套程序代码:print("100~200之间的素数有:")forminrange(100,200):flag=1foriinrange(2,m):ifm%i==0:flag=0 breakifflag==1:print(m,end="")程序运行结果:程序运行结果:100~200之间的素数有:101103107109113127131137139149151157163167173179181191193197199
break语句用在循环体内,迫使所在循环立即终止,即跳出所在循环体,继续执行循环结构后面的语句。1.break语句……break……expNY
5.4循环控制语句图5.11break语句对循环执行过程的影响示意图【例5.11】求两个整数m与n的最大公约数。
5.4循环控制语句程序代码:m,n=eval(input("请输入两个整数:"))ifm<n:min=melse:min=nforiinrange(min,1,-1):ifm%i==0andn%i==0:print("最大公约数是:",i)break程序运行结果:请输入两个整数:156,18最大公约数是:62.continue语句……continue……expNY
当在循环结构中遇到continue语句时,程序将跳过continue语句后面尚未执行的语句,重新开始下一轮循环,即只结束本次循环的执行,并不终止整个循环的执行。图5.12continue语句对循环执行过程的影响示意图
5.4循环控制语句【例5.12】
求1~100之间的全部奇数之和。
5.4循环控制语句程序代码:x=y=0whileTrue:x+=1ifx%2==0:continueelifx>100:break else:y+=xprint("y=",y)程序运行结果:y=25003.pass语句pass语句是一个空语句,它不做任何操作,代表一个空操作,在特别的时候用来保证格式或是语义的完整性。例如下面的循环语句:foriinrange(5):pass该语句的确会循环5次,但是除了循环本身之外,它什么也没做。
5.4循环控制语句【例5.13】pass语句应用:逐个输出“Python”字符串中的字符。
5.4循环控制语句程序代码:forletterin"Python":ifletter=="o":passprint("Thisispassblock")print("CurrentLetter:",letter)print("End!")程序运行结果:CurrentLetter:PCurrentLetter:yCurrentLetter:tCurrentLetter:hThisispassblockCurrentLetter:oCurrentLetter:nEnd!【例5.14】利用下面的公式求的近似值,要求累加到最后一项小于10-6为止。
5.5循环结构程序举例程序代码:importmaths=1n=1.0t=1.0pi=0whilemath.fabs(t)>=1e-6:pi=pi+tn=n+2s=-st=s/npi=pi*4print("PI=%f"%pi)程序运行结果:PI=3.141591【例5.15】两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。以抽签决定比赛名单。有人向队员打听比赛的名单,a说他不和x比,c说他不和x,z比。编程序找出三队比赛对手的名单。
5.5循环结构程序举例程序代码:foriinrange(ord('x'),ord('z')+1):forjinrange(ord('x'),ord('z')+1):ifi!=j:forkinrange(ord('x'),ord('z')+1):if(i!=k)and(j!=k):if(i!=ord('x'))and(k!=ord('x'))and(k!=ord('z')):print('orderis:\na-->%s\nb-->%s\nc-->%s'%(chr(i),chr(j),chr(k)))程序运行结果:orderis:a-->zb-->xc-->y
5.5循环结构程序举例程序代码:s=1i=1a=int(input("请输入角度值(单位:度):"))x=3.1415926/180*a#将角度转化为弧度sinx=xfitem=e=x#第0项为x,分子即为xd=1#第0项分母为1while(fitem>10**-7):e=e*x*xd=d*(i+1)*(i+2)i=i+2fitem=e/d#求通项的绝对值
s=-s#求该项的符号
sinx+=s*fitem#求正弦值print("sin(%3.1f)=%.3f"%(a,sinx))运行结果:请输入角度值(单位:度):30sin(30.0)=0.500【例5.17】“百钱百鸡”问题
公鸡5文钱一只,母鸡3文钱一只,小鸡3只一文钱,用100文钱买一百只鸡,其中公鸡、母鸡、小鸡都必须要有,问公鸡,母鸡,小鸡要买多少只刚好凑足100文钱?
5.5循环结构程序举例分析:显然这是一个组合问题,也可以看作是解不定方程的问题,采用列举的方法实现。令i、j、k分别表示公鸡、母鸡和小鸡的数目。[方法一]令i、j、k的列举范围分别为:i:1~20(公鸡最多能买20只)j:1~33(母鸡最多能买33只)k:1~100(小鸡最多能买100只)采用三重循环逐个搜索。
5.5循环结构程序举例程序代码:foriinrange(1,21):forjinrange(1,34):forkinrange(1,101):ifi+j+k==
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 暨南大学《社会学基础》2021-2022学年第一学期期末试卷
- 济宁学院《综合商务英语I》2021-2022学年第一学期期末试卷
- 吉首大学张家界学院《微机原理与接口技术》2021-2022学年第一学期期末试卷
- 艾滋病手术病人术中护理
- 肛瘘手术病号讲述
- 教育培训营销工作计划
- 一次性付清购买2024年度股票合同范本3篇
- 校园创意绿色环保活动
- 2024年度城市停车诱导系统集成合同2篇
- 肿瘤靶向药物及治疗
- 婚姻合同模板在找得到
- 污水处理厂土建工程施工方案
- 物理治疗在临床的应用
- 第一例应用ECMO患者护理查房
- 小红书课件教学课件
- 2024-2030年中国肉羊养殖行业市场运营模式及未来发展动向预测报告
- 基于区块链技术的农产品追溯与智能化管理方案
- 宠物神经系统疾病研究
- 2024年高中数学新课程标准考试模拟测试题及答案
- 第四单元(学习任务单)七年级语文上册大单元教学名师备课系列(统编版2024)
- 浙江省杭州市2024-2025学年高一上学期期中考试语文试卷(含答案)
评论
0/150
提交评论