yhon程序的控制结构_第1页
yhon程序的控制结构_第2页
yhon程序的控制结构_第3页
yhon程序的控制结构_第4页
yhon程序的控制结构_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

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

文档简介

Python语言程序设计第4章

程序的控制结构程序的基本结构程序的流程图程序流程图用一系列图形、流程线和文字说明描述程序的基本操作和控制流程,它是程序分析和过程描述的最基本方式。流程图的基本元素包括7种程序的流程图程序流程图示例:由连接点A连接的一个程序

程序的基本结构顺序结构是程序的基础,但单一的顺序结构不可能解决所有问题。程序由三种基本结构组成:顺序结构分支结构循环结构这些基本结构都有一个入口和一个出口。任何程序都由这三种基本结构组合而成程序的基本结构顺序结构是程序按照线性顺序依次执行的一种运行方式,其中语句块1S1和语句块S2表示一个或一组顺序执行的语句程序的基本结构分支结构是程序根据条件判断结果而选择不同向前执行路径的一种运行方式,包括单分支结构和二分支结构。由二分支结构会组合形成多分支结构程序的基本结构循环结构是程序根据条件判断结果向后反复执行的一种运行方式,根据循环体触发条件不同,包括条件循环和遍历循环结构程序的基本结构实例对于一个计算问题,可以用IPO描述、流程图描述或者直接以Python代码方式描述微实例4.1:圆面积和周长的计算。输入:圆半径R处理:圆面积:S=π*R*R圆周长:L=2*π*R输出:圆面积S、周长L

1234R=eval(input("请输入圆半径:"))S=3.1415*R*RL=2*3.1415*Rprint("面积和周长:",S,L)问题IPO描述

Python代码描述

程序序的的基基本本结结构构实实例例微实实例例4.2:实实数数绝绝对对值值的的计计算算。。1234R=eval(input("输入实数:"))if(R<0):R=-Rprint("绝对值",R)(a)问题题IPO描述述(b)流程程图图描描述述(c)Python代码码描描述述程序序的的基基本本结结构构实实例例微实实例例4.3:整整数数累累加加。。输入入::正正整整数数R处理理::S=1+2+3+……+R输出出::输输出出S123456R=eval(input("请输入正整数:"))i,S=0,0while(i<=R):S=S+ii=i+1print("累加求和",S)(a)问题题IPO描述述(b)流程程图图描描述述(c)Python代码码描描述述程序序的的基基本本结结构构实实例例IPO描描述述主主要要用用于于区区分分程程序序的的输输入入输输出出关关系系,,重重点点在在于于结结构构划划分分,算法法主要要采采用用自自然然语语言言描描述述流程程图图描描述述侧侧重重于于描描述述算算法法的的具具体体流流程程关关系系,,流流程程图图的的结结构构化化关关系系相相比比自自然然语语言言描描述述更更进进一一步步,,有有助助于于阐阐述述算算法法的的具具体体操操作作过过程程Python代码码描描述述是是最最终终的的程程序序产产出出,,最最为为细细致致。。程序序的的分分支支结结构构单分分支支结结构构:if语句句Python中if语句句的的语语法法格格式式如如下下::if<条件件>:语句句块块语句句块块是是if条件件满满足足后后执执行行的的一一个个或或多多个个语语句句序序列列语句句块块中中语语句句通通过过与与if所在在行行形形成成缩缩进进表表达达包包含含关关系系if语句句首首先先评评估估<条件件>的结结果果值值,,如如果果结结果果为为True,则则执执行行语语句句块块里里的的语语句句序序列列,,然然后后控控制制转转向向程程序序的的下下一一条条语语句句。。如如果果结结果果为为False,语语句句块块里里的的语语句句会会被被跳跳过过。。布尔尔类类型型(bool)TrueFlasebool函数数:bool(2)>>>A=1>2>>>type(A)数字字非非零零为为True字符符串串为为True,空字符符串为False关系运算算符if语中<条件>部分可以以使用任任何能够够产生True或False的语句形成判断断条件最最常见的的方式是是采用关关系操作作符Python语言共有有6个关系操操作符操作符数学符号操作符含义<

<

小于<=≤小于等于>=≥大于等于>

>

大于===等于!=不等于逻辑操作作符(notandor)优先级是是not>and>or逻辑操作作符and和or也称作短短路操作作符(short-circuitlogic):它们们的参数数从左向向右解析析,一旦旦结果可可以确定定就停止止。例如如,如果果A和C为真而B为假,AandBandC不会解析析C3and4,4and33or4(3),4or3(4)单分支结结构:if语句if语句的控控制流程程图if语句中语语句块执执行与否否依赖于于条件判判断。但但无论什什么情况况,控制制都会转转到if语句后与与该语句句同级别别的下一一条语句句单分支结结构:if语句微实例4.4:PM2.5空气质量量提醒((1)输入:接接收外部部输入PM2.5值处理:ifPM2.5值>=75,打印空空气污染染警告if35<=PM2.5值<75,打印空空气污染染警告ifPM2.5值<35,打印空空气质量量优,建建议户外外运动输出:打打印空气气质量提提醒微实例4.4m4.4PM25Warning.py

1234567PM=eval(input("请输入PM2.5数值:"))if0<=PM<35:print("空气优质,快去户外运动!")if35<=PM<75:print("空气良好,适度户外活动!")if75<=PM:print("空气污染,请小心!")

二分支结构构:if-else语句Python中if-else语句用来来形成二二分支结结构,语语法格式式如下::if<条件>:<语句块1>else:<语句块2><语句块块1>是是在if条件满满足后执执行的一一个或多多个语句句序列<语句块块2>是是if条条件不满满足后执执行的语语句序列列二分支语语句用于于区分<条件>的两种种可能True或者False,分分别形成成执行路路径二分支结构构:if-else语句微实例4.5:PM2.5空气质量量提醒((2)微实例4.5m4.5PM25Warning.py

12345PM=eval(input("请输入PM2.5数值:"))ifPM>=75:print("空气存在污染,请小心!")else:

print("空气没有污染,可以开展户外运动!")

二分支结构构:if-else语句二分支结结构还有有一种更更简洁的的表达方方式,适适合通过过判断返返回特定定值,语语法格式式如下::<表达式1>if<条件>else<表达式2>

12PM=eval(input("请输入PM2.5数值:"))print("空气{}污染!".format("存在"ifPM>=75else"没有"))

二分支结构构:if-else语句>>>count=2>>>countifcount!=0else"不存在"2>>>count=0>>>countifcount!=0else"不存在""不存在"if…else的紧凑凑结构非非常适合合对特殊殊值处理理的情况况,如下下:多分支结结构:if-elif-else语句Python的的if-elif-else描述多多分支结结构,语语句格式式如下:if<条件1>:<语句块1>elif<条件2>:<语句块2>...else:<语句块N>多分支结结构:if-elif-else语句多分支结结构是二二分支结结构的扩扩展,这这种形式式通常用用于设置置同一个个判断条条件的多多条执行行路径。。Python依依次评估估寻找第第一个结结果为True的条件件,执行行该条件件下的语语句块,,同时结束后跳过整个个if-elif-else结构,执执行后面面的语句句。如果果没有任任何条件件成立,,else下面的语语句块被被执行。。else子句是可可选的多分支结结构:if-elif-else语句微实例4.4通过多条条独立的的if语句对同同一个变变量PM进行判断断,这种种情况更更适合多多分支结结构,改改造后的的代码如如下

1234567PM=eval(input("请输入PM2.5数值:"))if0<=PM<35:print("空气优质,快去户外运动!")elif35<=PM<75:print("空气良好,适度户外活动!")else:print("空气污染,请小心!")

身体质量量指数BMIBMI的的定义如如下:BMI=体重(kg)÷身高2(m2)例如,一一个人身身高1.75米、体重重75公斤,他他的BMI值为24.49身体质量量指数BMI分类国际BMI值(kg/m2)国内BMI值(kg/m2)偏瘦<18.5<18.5正常18.5~2518.5~24偏胖25~3024~28肥胖>=30>=28编写一个个根据体体重和身身高计算算BMI值的程程序,并并同时输输出国际际和国内内的BMI指标标建议值值身体质量量指数BMI实例代码5.1e5.1CalBMI.py

12

345678910111213141516171819202122#e5.1CalBMI.pyheight,weight=eval(input("请输入身高(米)和体重\(公斤)[逗号隔开]:"))bmi=weight/pow(height,2)print("BMI数值为:{:.2f}".format(bmi))wto,dom="",""ifbmi<18.5:#WTO标准wto="偏瘦"elifbmi<25:#18.5<=bmi<25wto="正常"elifbmi<30:#25<=bmi<30wto="偏胖"else:wto="肥胖"ifbmi<18.5:#我国卫生部标准dom="偏瘦"elifbmi<24:#18.5<=bmi<24dom="正常"elifbmi<28:#24<=bmi<28dom="偏胖"else:dom="肥胖"print("BMI指标为:国际'{0}',国内'{1}'".format(wto,dom))

>>>

请输入身高(米)和体重(公斤)[逗号隔开]:1.75,75BMI数值为:24.49BMI指标为:国际'正常',国内'偏胖'实例代码5.2e5.2CalBMI.py

12

3456789101112131415161718#e5.2CalBMI.pyheight,weight=eval(input("请输入身高(米)和体重\(公斤)[逗号隔开]:"))bmi=weight/pow(height,2)print("BMI数值为:{:.2f}".format(bmi))wto,dom="",""ifbmi<18.5:wto,dom="偏瘦","偏瘦"elif18.5<=bmi<24:wto,dom="正常","正常"elif24<=bmi<25:wto,dom="正常","偏胖"elif25<=bmi<28:wto,dom="偏胖","偏胖"elif28<=bmi<30:wto,dom="偏胖","肥胖"else:wto,dom="肥胖","肥胖"print("BMI指标为:国际'{0}',国内'{1}'".format(wto,dom))

程序的循循环结构构遍历循环环:for语句遍历循环环:根据循环环执行次次数的确确定性,,循环可可以分为为确定次次数循环环和非确确定次数数循环。。确定次次数循环环指循环环体对循循环次数数有明确确的定义义循环次次数采用用遍历结结构中元元素个数数来体现现Python通通过保留留字for实现现“遍历循环环”:for<循环变量量>in<遍历结构构>:<语句块>遍历循环环:for语句遍历结构构可以是是字符串串、文件件、组合合数据类类型或range()函数:循环N次foriinrange(N):<语句块>遍历文件fi的每一行forlineinfi:<语句块>遍历字符串sforcins:<语句块>遍历列表lsforiteminls:<语句块>遍历循环环还有一一种扩展展模式,,使用方方法如下下:for<循环变量量>in<遍历结构构>:<语句块1>else:<语句块2>遍历循环环:for语句当for循环正正常执行行之后,,程序会会继续执执行else语语句中内内容。else语句只只在循环环正常执执行之后后才执行行并结束,因此,可可以在<语句块2>中放置判判断循环环执行情情况的语语句。

12345forsin"BIT":print("循环进行中:"+s)else:s="循环正常结束"print(s)

>>>

循环进行中:B循环进行中:I循环进行中:T循环正常结束无限循环环:while语句无限循环环:无限循环环一直保保持循环环操作直直到特定循环条件不被满足才结结束,不不需要提提前知道确定循环次数数。Python通通过保留留字while实现无无限循环环,使用用方法如如下:while<条件>:<语句块>语句块无限循环环:while语句无限循环环也有一一种使用用保留字字else的扩展模模式:while<条件>:<语句块1>else:<语句块2>

1234567s,idx="BIT",0whileidx<len(s):print("循环进行中:"+s[idx])idx+=1else:s="循环正常结束"print(s)

>>>

循环进行中:B循环进行中:I循环进行中:T循环正常结束循环保留留字:break和continue循环结构构有两个个辅助保留字::break和continue,它们用用来辅助助控制循循环执行行break用来跳出出最内层层for或while循环,脱脱离该循循环后程序从循循环后代代吗继续续执行

12345forsin"BIT":foriinrange(10):print(s,end="")ifs=="I":break

>>>

BBBBBBBBBBITTTTTTTTTT其中,break语句跳出出了最内内层for循环,但但仍然继继续执行行外层循循环。每每个break语句只有有能力跳跳出当前前层次循循环循环保留留字:break和continuecontinue用来结束束当前当当次循环环,即跳跳出循环环体中下下面尚未未执行的的语句,,但不跳跳出当前前循环。。对于while循环,继继续求解解循环条条件。而而对于for循环,程程序流程程接着遍遍历循环环列表对比continue和break语句,如如下

1234forsin"PYTHON":ifs=="T":continueprint(s,end="")

1234forsin"PYTHON":ifs=="T":breakprint(s,end="")

>>>

PYHON>>>

PY循环保保留字字:break和continuecontinue语句和和break语句的的区别别是::continue语句只只结束束本次次循环环,而而不终终止整整个循循环的的执行行。break语句则则是结结束整整个循循环过过程,,不再再判断断执行行循环环的条条件是是否成成立

1234forsin"PYTHON":ifs=="T":continueprint(s,end="")

1234forsin"PYTHON":ifs=="T":breakprint(s,end="")

>>>

PYHON>>>

PY循环保保留字字:break和continuefor循环环和while循环环中都都存在在一个个else扩展展用法法。else中中的语语句块块只在在一种种条件件下执执行,,即for循环环正常常遍历了所有有内容容没有有因为为break或return而退出出。continue保留字字对else没有影影响。。看下下面两两个例例子

123456forsin"PYTHON":ifs=="T":continueprint(s,end="")else:print("正常退出")

123456forsin"PYTHON":ifs=="T":breakprint(s,end="")else:print("正常退出")

>>>

PYHON正常退出>>>

PYrandom库的使使用random库概述述随机数数在计计算机机应用用中十十分常常见,,Python内置置的random库库主要要用于于产生生各种种分布布的伪伪随机机数序序列。。random库采采用梅梅森旋旋转算算法((Mersennetwister)生成成伪随随机数数序列列,可可用于于除随随机性性要求求更高高的加加解密密算法法外的的大多多数工工程应应用。。使用random库主要要目的的是生生成随随机数数,因因此,,读者者只需需要查查阅该该库的的随机机数生生成函函数,,找到到符合合使用用场景景的函函数使使用即即可。。这个个库提提供了了不同同类型型的随随机数数函数数,所所有函函数都都是基基于最最基本本的random.random()函数扩扩展而而来。。random库解析析函数描述seed(a=None)初始化随机数种子,默认值为当前系统时间random()生成一个[0.0,1.0)之间的随机小数randint(a,b)生成一个[a,b]之间的整数getrandbits(k)生成一个k比特长度的随机整数randrange(start,stop[,step])生成一个[start,stop)之间以step为步数的随机整数uniform(a,b)生成一个[a,b]之间的随机小数choice(seq)从序列类型(例如:列表)中随机返回一个元素shuffle(seq)将序列类型中元素随机排列,返回打乱后的序列sample(pop,k)从pop类型中随机选取k个元素,以列表类型返回random库解析析对random库的的引用用方法法与math库库一样样,采采用下下面两两种方方式实实现::importrandom或fromrandomimport*>>>fromrandomimport*>>>random()0.2922089114412476>>>uniform(1,10)1.5913082783598524>>>uniform(1,20)7>>>randrange(0,100,4)#从0开始到100以4递增的元素中随机返回96>>>choice(range(100))97>>>ls=list(range(10))>>>print(ls)[0,1,2,3,4,5,6,7,8,9]>>>shuffle(ls)>>>print(ls)[5,8,4,7,6,9,3,0,2,10,1,2,3,4,5,6,7,8,9]random库解析析生成随随机数数之前前可以以通过过seed()函数指指定随随机数数种子子,随随机种种子一一般是是一个个整数数,只只要种种子相相同,,每次次生成成的随随机数数序列列也相相同。。这种种情况况便于于测试试和同同步数数据>>>seed(125)#随机种子赋值125>>>"{}.{}.{}".format(randint(1,10),randint(1,10),randint(1,10))'4.4.10'>>>"{}.{}.{}".format(randint(1,10),randint(1,10),randint(1,10))'5.10.3'>>>seed(125)#再次给随机种子赋值125>>>"{}.{}.{}".format(randint(1,10),randint(1,10),randint(1,10))'4.4.10'π的计算算π的计算算π(圆圆周率率)是是一个个无理理数,,即无无限不不循环环小数数。精精确求求解圆圆周率率π是是几何何学、、物理理学和和很多多工程程学科科的关关键。。对π的精确确求解解曾经是数学学历史史上一一直难难以解解决的的问题题之一一,因因为π无法用用任何何精确确公式式表示示,在在电子子计算算机出出现以以前,,π只能通通过一一些近近似公公式的的求解解得到到,直直到1948年,人人类才才以人人工计计算方方式得得到π的808位精确确小数数。π的计算算随着计计算机机的出出现,,数学学家找找到了了另类求解π的另类方法::蒙特卡卡罗((MonteCarlo)方法法,又又称随随机抽抽样或或统计计试验验方法法。当当所要要求解解的问问题是是某种种事件件出现现的概概率,,或者者是某某个随随机变变量的的期望望值时时,它它们可可以通通过某某种“试验”的方法法,得得到这这种事事件出出现的的频率率,或或者这这个随随机变变数的的平均均值,,并用用它们们作为为问题题的解解。这这就是蒙特特卡罗罗方法法的基基本思思想。。π的计算算应用蒙蒙特卡卡罗方方法求求解ππ的基基本步步骤如如下::随机向向单位正正方形形和圆圆结构构,抛洒大大量“飞镖”点计算每每个点点到圆圆心的的距离离从而而判断断该点点在圆圆内或或者圆圆外用圆内内的点点数除除以总总点数数就是是π/4值。随机点点数量量越大大,越越充分分覆盖盖整个个图形形,计计算得得到的的π值越精确。。实际上,,这个方法法的思想是是利用离散散点值表示示图形的面面积,通过过面积比例例来求解π值。π的计算计算π使用的正方方形和圆结结构计算π使用的1/4区域和抛点点过程π的计算实例代码6.1e6.1CalPi.py

123456789101112131415#e6.1CalPi.pyfromrandomimportrandomfrommathimportsqrtfromtimeimportclockDARTS=10000hits=0.0clock()foriinrange(1,DARTS+1):x,y=random(),random()dist=sqrt(x**2+y**2)ifdist<=1.0:hits=hits+1pi=4*(hits/DARTS)print("Pi值是{}.".format(pi))print("运行时间是:{:5.5}s".format(clock()))

>>>

Pi值是3.144.运行时间是:0.016477sπ的计算DARTSπ运行时间2103.1093750.011s2113.1386710.012s2123.1503900.014s2133.1435540.018s2143.1413570.030s2153.1478270.049s2163.1419670.116s2183.1445770.363s2203255s2253.141697883640.13s不同抛点数数产生的精精度和运行行时间异常处理机机制异常处理:try-except语句

12num=eval(input("请输入一个整数:"))print(num**2)

观察下面这这段小程序序:当用户输入入的不是数数字呢?>>>

请输入一个整数:10010000>>>

请输入一个整数:NOTraceback(mostrecentcalllast):File"D:/PythonPL/echoInt.py",line1,in<module>num=eval(input("请输入一个整数:"))File"<string>",line1,in<module>NameError:name'No'isnotdefined异常处理:try-except语句(接管错误)Python解释器器返回了异异常信息,,同时程序序退出异常处理:try-except语句Python异常信信息中最重重要的部分分是异常类类型,它表表明了发生生异常的原原因,也是是程序处理理异常的依依据。Python使用try-except语句实现异异常处理,,基本的语语法格式如如下:try:<语句块1>except<异常类

温馨提示

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

评论

0/150

提交评论