《python程序的控制结构谷风参考》由会员分享,可在线阅读,更多相关《python程序的控制结构谷风参考(64页珍藏版)》请在金锄头文库上搜索。
1、Python语言程序设计1谷风书苑第4章程序的控制结构2谷风书苑程序的基本结构3谷风书苑程序的流程图程序流程图用一系列图形、流程线和文字说明描述程序的基本操作和控制流程,它是程序分析和过程描述的最基本方式。流程图的基本元素包括7种4谷风书苑程序的流程图程序流程图示例:由连接点程序流程图示例:由连接点A连接的一个程序连接的一个程序5谷风书苑程序的基本结构顺序结构是程序的基础,但单一的顺序结构不可能解决所有问题。程序由三种基本结构组成:n顺序结构n分支结构n循环结构这些基本结构都有一个入口和一个出口。任何程序都由这三种基本结构组合而成6谷风书苑程序的基本结构顺序结构是程序按照线性顺序依次执行的一种
2、运行方式,其中语句块1S1和语句块S2表示一个或一组顺序执行的语句7谷风书苑程序的基本结构分支结构是程序根据条件判断结果而选择不同向前执行路径的一种运行方式,包括单分支结构和二分支结构。由二分支结构会组合形成多分支结构8谷风书苑程序的基本结构循环结构是程序根据条件判断结果向后反复执行的一种运行方式,根据循环体触发条件不同,包括条件循环和遍历循环结构9谷风书苑程序的基本结构实例对于一个计算问题,可以用IPO描述、流程图描述或者直接以Python代码方式描述微实微实例例4.1:圆面:圆面积和周长的计算。积和周长的计算。输入输入:圆半径R处理处理:圆面积:S = *R*R圆周长:L = 2*R输出输
3、出:圆面积S、周长L1234R=eval(input(请输入圆半径请输入圆半径:)S=3.1415*R*RL=2*3.1415*Rprint(面积和周长面积和周长:,S,L)问题IPO描述Python代码描述10谷风书苑程序的基本结构实例微实例微实例4.2:实数绝对值的计算。:实数绝对值的计算。1234R=eval(input(输输入入实实数数:)if(R0):R=-Rprint(绝对值绝对值,R)(a) 问题IPO描述(b) 流程图描述(c) Python代码描述11谷风书苑程序的基本结构实例微实例微实例4.3:整数累加。:整数累加。输入:正整数R处理:S=1+2+3+R输出:输出S1234
4、56R=eval(input(请请输输入入正正整数整数:)i,S=0,0while(i=R):S=S+ii=i+1print(累加求和累加求和,S)(a) 问题IPO描述(b) 流程图描述(c) Python代码描述12谷风书苑程序的基本结构实例IPO描述主要用于区分程序的输入输出关系,重点在于结构划分,算法主要采用自然语言描述流程图描述侧重于描述算法的具体流程关系,流程图的结构化关系相比自然语言描述更进一步,有助于阐述算法的具体操作过程Python代码描述是最终的程序产出,最为细致。13谷风书苑程序的分支结构14谷风书苑单分支结构:if语句Python中if语句的语法格式如下:if:语句块语
5、句块是if条件满足后执行的一个或多个语句序列语句块中语句通过与if所在行形成缩进表达包含关系if语句首先评估的结果值,如果结果为True,则执行语句块里的语句序列,然后控制转向程序的下一条语句。如果结果为False,语句块里的语句会被跳过。15谷风书苑布尔类型(bool)TrueFlasebool函数:bool(2)A=12type(A)数字非零为True字符串为True,空字符串为False16谷风书苑关系运算符if语中部分可以使用任何能够产生True或False的语句形成判断条件最常见的方式是采用关系操作符Python语言共有6个关系操作符操作符数学符号操作符含义小于=大于等于大于=等于!
6、=不等于17谷风书苑逻辑操作符(notandor)优先级是notandor逻辑操作符and和or也称作短路操作符(short-circuitlogic):它们的参数从左向右解析,一旦结果可以确定就停止。例如,如果A和C为真而B为假,AandBandC不会解析C3and4,4and33or4(3),4or3(4)18谷风书苑单分支结构:if语句if语句的控制流程图语句的控制流程图if语句中语句块执行与否依赖于条件判断。但无论什么情况,控制都会转到if语句后与该语句同级别的下一条语句19谷风书苑单分支结构:if语句微实例4.4:PM2.5空气质量提醒(1)输入:接收外部输入PM2.5值处理:ifP
7、M2.5值=75,打印空气污染警告if35=PM2.5值75,打印空气污染警告ifPM2.5值35,打印空气质量优,建议户外运动输出:打印空气质量提醒 微实例4.4m4.4PM25Warning.py1234567PM=eval(input(请输入请输入PM2.5数值数值:)if0=PM35:print(空气优质,快去户外运动空气优质,快去户外运动!)if35=PM75:print(空气良好,适度户外活动!空气良好,适度户外活动!)if75=PM:print(空气污染,请小心!空气污染,请小心!)20谷风书苑二分支结构:if-else语句Python中if-else语句用来形成二分支结构,语法
8、格式如下:if:else:是在if条件满足后执行的一个或多个语句序列是if条件不满足后执行的语句序列二分支语句用于区分的两种可能True或者False,分别形成执行路径21谷风书苑二分支结构:if-else语句微实例4.5:PM2.5空气质量提醒(2)微实例4.5m4.5PM25Warning.py12345PM=eval(input(请输入请输入PM2.5数值数值:)ifPM=75:print(空气存在污染,请小心!空气存在污染,请小心!)else:print(空气没有污染,可以开展户外运动空气没有污染,可以开展户外运动!)22谷风书苑二分支结构:if-else语句二分支结构还有一种更简洁的
9、表达方式,适合通过判断返回特定值,语法格式如下:ifelse12PM=eval(input(请输入请输入PM2.5数值数值:)print(空气空气污染污染!.format(存在存在ifPM=75else没有没有)23谷风书苑二分支结构:if-else语句count=2countifcount!=0else不存在不存在2count=0countifcount!=0else不存在不存在不存在不存在ifelse的紧凑结构非常适合对特殊值处理的情况,如下:24谷风书苑多分支结构:if-elif-else语句Python的if-elif-else描述多分支结构,语句格式如下:if:elif:.else:
10、25谷风书苑多分支结构:if-elif-else语句多分支结构是二分支结构的扩展,这种形式通常用于设置同一个判断条件的多条执行路径。Python依次评估寻找第一个结果为True的条件,执行该条件下的语句块,同时结束后跳过整个if-elif-else结构,执行后面的语句。如果没有任何条件成立,else下面的语句块被执行。else子句是可选的26谷风书苑多分支结构:if-elif-else语句微实例4.4通过多条独立的if语句对同一个变量PM进行判断,这种情况更适合多分支结构,改造后的代码如下1234567PM=eval(input(请输入请输入PM2.5数值数值:)if0=PM35:print(
11、空气优质,快去户外运动空气优质,快去户外运动!)elif35=PM75:print(空气良好,适度户外活动!空气良好,适度户外活动!)else:print(空气污染,请小心!空气污染,请小心!)27谷风书苑身体质量指数BMIBMI的定义如下:BMI=体重(kg)身高2(m2)例如,一个人身高1.75米、体重75公斤,他的BMI值为24.4928谷风书苑身体质量指数BMI分类国际BMI值(kg/m2)国内BMI值(kg/m2)偏瘦 18.5= 30= 28编写一个根据体重和身高计算BMI值的程序,并同时输出国际和国内的BMI指标建议值29谷风书苑身体质量指数BMI实例代码5.1e5.1CalBM
12、I.py12345678910111213141516171819202122#e5.1CalBMI.pyheight,weight=eval(input(请输入身高请输入身高(米米)和体重和体重(公斤公斤)逗号隔开逗号隔开:)bmi=weight/pow(height,2)print(BMI数值为:数值为::.2f.format(bmi)wto,dom=,ifbmi18.5:#WTO标准标准wto=偏瘦偏瘦elifbmi25:#18.5=bmi25wto=正常正常elifbmi30:#25=bmi30wto=偏胖偏胖else:wto=肥胖肥胖ifbmi18.5:#我国卫生部标准我国卫生部标准
13、dom=偏瘦偏瘦elifbmi24:#18.5=bmi24dom=正常正常elifbmi28:#24=bmi请输入身高(米)和体重(公斤)逗号隔开:1.75,75BMI数值为:24.49BMI指标为:国际正常,国内偏胖30谷风书苑实例代码5.2e5.2CalBMI.py123456789101112131415161718#e5.2CalBMI.pyheight,weight=eval(input(请输入身高请输入身高(米米)和体重和体重(公斤公斤)逗号隔开逗号隔开:)bmi=weight/pow(height,2)print(BMI数值为:数值为::.2f.format(bmi)wto,do
14、m=,ifbmi18.5:wto,dom=偏瘦偏瘦,偏瘦偏瘦elif18.5=bmi24:wto,dom=正常正常,正常正常elif24=bmi25:wto,dom=正常正常,偏胖偏胖elif25=bmi28:wto,dom=偏胖偏胖,偏胖偏胖elif28=bmi30:wto,dom=偏胖偏胖,肥胖肥胖else:wto,dom=肥胖肥胖,肥胖肥胖print(BMI指标为指标为:国际国际0,国内国内1.format(wto,dom)31谷风书苑程序的循环结构32谷风书苑遍历循环:for语句遍历循环:根据循环执行次数的确定性,循环可以分为确定次数循环和非确定次数循环。确定次数循环指循环体对循环次数
15、有明确的定义循环次数采用遍历结构中元素个数来体现Python通过保留字for实现“遍历循环”:forin:33谷风书苑遍历循环:for语句遍历结构可以是字符串、文件、组合数据类型或range()函数:循环N次for i in range(N): 遍历文件fi的每一行for line in fi: 遍历字符串s for c in s: 遍历列表ls for item in ls: 遍历循环还有一种扩展模式,使用方法如下:forin:else:34谷风书苑遍历循环:for语句当for循环正常执行之后,程序会继续执行else语句中内容。else语句只在循环正常执行之后才执行并结束,因此,可以在中放置
16、判断循环执行情况的语句。12345forsinBIT:print(循环进行中循环进行中:+s)else:s=循环正常结束循环正常结束print(s)循环进行中:B循环进行中:I循环进行中:T循环正常结束35谷风书苑无限循环:while语句无限循环:无限循环一直保持循环操作直到特定循环条件不被满足才结束,不需要提前知道确定循环次数。Python通过保留字while实现无限循环,使用方法如下:while:语句块36谷风书苑无限循环:while语句无限循环也有一种使用保留字else的扩展模式:while:else:1234567s,idx=BIT,0whileidx循环进行中:B循环进行中:I循环进
17、行中:T循环正常结束37谷风书苑循环保留字:break和continue循环结构有两个辅助保留字:break和continue,它们用来辅助控制循环执行break用来跳出最内层for或while循环,脱离该循环后程序从循环后代吗继续续执行12345forsinBIT:foriinrange(10):print(s,end=)ifs=I:breakBBBBBBBBBBITTTTTTTTTT其中,break语句跳出了最内层for循环,但仍然继续执行外层循环。每个break语句只有能力跳出当前层次循环38谷风书苑循环保留字:break和continuecontinue用来结束当前当次循环,即跳出循环
18、体中下面尚未执行的语句,但不跳出当前循环。对于while循环,继续求解循环条件。而对于for循环,程序流程接着遍历循环列表对比continue和break语句,如下1234forsinPYTHON:ifs=T:continueprint(s,end=)1234forsinPYTHON:ifs=T:breakprint(s,end=)PYHONPY39谷风书苑循环保留字:break和continuecontinue语句和break语句的区别是:continue语句只结束本次循环,而不终止整个循环的执行。break语句则是结束整个循环过程,不再判断执行循环的条件是否成立1234forsinPYTH
19、ON:ifs=T:continueprint(s,end=)1234forsinPYTHON:ifs=T:breakprint(s,end=)PYHONPY40谷风书苑循环保留字:break和continuefor循环和while循环中都存在一个else扩展用法。else中的语句块只在一种条件下执行,即for循环正常遍历了所有内容没有因为break或return而退出。continue保留字对else没有影响。看下面两个例子123456forsinPYTHON:ifs=T:continueprint(s,end=)else:print(正常退出正常退出)123456forsinPYTHON:i
20、fs=T:breakprint(s,end=)else:print(正常退出正常退出)PYHON正常退出PY41谷风书苑random库的使用42谷风书苑random库概述随机数在计算机应用中十分常见,Python内置的random库主要用于产生各种分布的伪随机数序列。random库采用梅森旋转算法(Mersennetwister)生成伪随机数序列,可用于除随机性要求更高的加解密算法外的大多数工程应用。使用random库主要目的是生成随机数,因此,读者只需要查阅该库的随机数生成函数,找到符合使用场景的函数使用即可。这个库提供了不同类型的随机数函数,所有函数都是基于最基本的random.rando
21、m()函数扩展而来。43谷风书苑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(
22、pop, k)从pop类型中随机选取k个元素,以列表类型返回44谷风书苑random库解析对random库的引用方法与math库一样,采用下面两种方式实现:importrandom或fromrandomimport*fromrandomimport*random()0.2922089114412476uniform(1,10)1.5913082783598524uniform(1,20)7randrange(0,100,4)#从从0开始到开始到100以以4递增的递增的元素中随机返回元素中随机返回96choice(range(100)97ls=list(range(10)print(ls)0,1
23、,2,3,4,5,6,7,8,9shuffle(ls)print(ls)5,8,4,7,6,9,3,0,2,10,1,2,3,4,5,6,7,8,945谷风书苑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.3see
24、d(125)#再次给随机种子赋值再次给随机种子赋值125.format(randint(1,10),randint(1,10),randint(1,10)4.4.1046谷风书苑的计算47谷风书苑的计算的计算(圆周率)是一个无理数,即无限不循环小数。精确求解圆周率是几何学、物理学和很多工程学科的关键。对的精确求解曾经是数学历史上一直难以解决的问题之一,因为无法用任何精确公式表示,在电子计算机出现以前,只能通过一些近似公式的求解得到,直到1948年,人类才以人工计算方式得到的808位精确小数。48谷风书苑的计算的计算随着计算机的出现,数学家找到了另类求解的另类方法:蒙特卡罗(MonteCarlo
25、)方法,又称随机抽样或统计试验方法。当所要求解的问题是某种事件出现的概率,或者是某个随机变量的期望值时,它们可以通过某种“试验”的方法,得到这种事件出现的频率,或者这个随机变数的平均值,并用它们作为问题的解。这就是蒙特卡罗方法的基本思想。49谷风书苑的计算的计算应用蒙特卡罗方法求解的基本步骤如下:随机向单位正方形和圆结构,抛洒大量“飞镖”点计算每个点到圆心的距离从而判断该点在圆内或者圆外用圆内的点数除以总点数就是/4值。随机点数量越大,越充分覆盖整个图形,计算得到的值越精确。实际上,这个方法的思想是利用离散点值表示图形的面积,通过面积比例来求解值。50谷风书苑的计算的计算计算使用的正方形和圆结
26、构计算使用的1/4区域和抛点过程51谷风书苑的计算的计算实例代码6.1e6.1CalPi.py123456789101112131415#e6.1CalPi.pyfromrandomimportrandomfrommathimportsqrtfromtimeimportclockDARTS=10000hits=0.0clock()foriinrange(1,DARTS+1):x,y=random(),random()dist=sqrt(x*2+y*2)ifdistPi值是3.144.运行时间是:0.016477s52谷风书苑的计算的计算DARTS运行时间2103.1093750.011s211
27、3.1386710.012s2123.1503900.014s2133.1435540.018s2143.1413570.030s2153.1478270.049s2163.1419670.116s2183.1445770.363s2203.14266967771.255s2253.141697883640.13s不同抛点数产生的精度和运行时间53谷风书苑异常处理机制54谷风书苑异常处理异常处理: try-except语句语句12num=eval(input(请输入一个整数请输入一个整数:)print(num*2)观察下面这段小程序:当用户输入的不是数字呢?请输入一个整数:10010000请输
28、入一个整数:NOTraceback(mostrecentcalllast):FileD:/PythonPL/echoInt.py,line1,innum=eval(input(请输入一个整数:)File,line1,inNameError:nameNoisnotdefined55谷风书苑异常处理异常处理: try-except语句语句(接管错误)Python解释器返回了异常信息,同时程序退出56谷风书苑异常处理异常处理: try-except语句语句Python异常信息中最重要的部分是异常类型,它表明了发生异常的原因,也是程序处理异常的依据。Python使用try-except语句实现异常处理
29、,基本的语法格式如下:try:except:57谷风书苑异常处理异常处理: try-except语句语句12try:num=eval(input(请输入一个整数请输入一个整数:)print(num*2)except:print(输入错误,请输入一个整数输入错误,请输入一个整数!)该程序执行效果如下:请输入一个整数:NO输入错误,请输入一个整数!58谷风书苑异常的高级用法异常的高级用法try-except语句可以支持多个except语句,语法格式如下:try:except:.except:except:59谷风书苑异常的高级用法异常的高级用法最后一个except语句没有指定任何类型,表示它对应的
30、语句块可以处理所有其他异常。这个过程与if-elif-else语句类似,是分支结构的一种表达方式,一段代码如下12345678try:alp=ABCDEFGHIJKLMNOPQRSTUVWXYZidx=eval(input(请输入一个整数请输入一个整数:)print(alpidx)exceptNameError:print(输入错误,请输入一个整数输入错误,请输入一个整数!)except:print(其他错误其他错误)60谷风书苑异常的高级用法异常的高级用法该程序将用户输入的数字作为索引从字符串alp中返回一个字符,当用户输入非整数字符时,exceptNameError异常被捕获到,提示升用户
31、输入类型错误,当用户输入数字不在01到256之间时,异常被except捕获,程序打印其他错误信息,执行过程和结果如下:请输入一个整数:NO输入错误,请输入一个整数!请输入一个整数:100其他错误61谷风书苑异常的高级用法异常的高级用法除了try和except保留字外,异常语句还可以与else和finally保留字配合使用,语法格式如下:try:except:else:finally:62谷风书苑异常的高级用法异常的高级用法63谷风书苑异常的高级用法异常的高级用法采用else和finally修改代码如下:12345678910try:alp=ABCDEFGHIJKLMNOPQRSTUVWXYZidx=eval(input(请输入一个整数请输入一个整数:)print(alpidx)exceptNameError:print(输入错误,请输入一个整数输入错误,请输入一个整数!)else:print(没有发生异常没有发生异常)finally:print(程序执行完毕,不知道是否发生了异常程序执行完毕,不知道是否发生了异常)执行过程和结果如下:请输入一个整数:5F没有发生异常程序执行完毕,不知道是否发生了异常请输入一个整数:NO输入错误,请输入一个整数!程序执行完毕,不知道是否发生了异常64谷风书苑