Python程序设计课件第3章 程序流程控制_第1页
Python程序设计课件第3章 程序流程控制_第2页
Python程序设计课件第3章 程序流程控制_第3页
Python程序设计课件第3章 程序流程控制_第4页
Python程序设计课件第3章 程序流程控制_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

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

文档简介

3.1算法概述第三章程序流程控制of311算法是指为解决问题而采取的方法和步骤。算法的要素有以下两部分:(1)对数据对象的运算和操作。(2)算法的控制结构(运算和操作时间的顺序):顺序结构,循环结构,选择结构。其中顺序结构是最简单也最常用的结构,它的执行顺序是自上而下,依次执行。其余两种结构接下来会介绍。3.1.1算法及其要素和特性3.1算法概述of312算法的特征有如下几方面。有穷性:算法的有穷性是指算法必须能够在执行有限步之后停止;确切性:算法的每一步都要有确切的定义;输入项:一个算法要有0个或多个输入项,用来反映问题的原始状态,如果是0个输入项,则是算法自己有初始条件;输出项:算法都有输出项,可以是一个也可以是多个输出项。用来反映对数据加工处理后的结果;可行性:即算法的每个步骤都能在有限时间内完成。因为计算机的运算速度并不是无限快的,所以在设计算法时一定要注意时间资源,同样,存储器的空间也是有限的,所以在设计算法时一定要尽可能地节约时间和空间两方面的开销。3.1.1算法及其要素和特性第三章程序流程控制3.1算法概述of3131.用自然语言表示该方法就是直接用自然语言描述算法。一般除了很简单的问题,不用自然语言表示。2.用流程图表示流程图可以很直观地表现出算法的过程,易于理解。流程图主要由图3.1所示的4种框加上流程线组合而成。3.1.2算法表示方法图3.1流程图的部件第三章程序流程控制3.1算法概述of314图3.2描述判断输入的年份是否为闰年的流程。3.1.2算法表示方法图3.2判断年份是否为闰年的流程图第三章程序流程控制3.1算法概述of3153.用伪代码表示伪代码是一种用来书写程序或描述算法时使用的非正式、透明的表述方法。伪代码通常采用自然语言、数学公式和符号相结合来描述算法的操作步骤,同时采用计算机高级语言的控制结构来描述算法步骤的执行。只要自己或者别人能看懂即可。下面看一个例子:用伪代码表示求一个列表中最大元素值的算法。3.1.2算法表示方法第三章程序流程控制3.1算法概述of316MaxElement(a_list:list)#求一个列表中的最大元素#a_list:list代表输入的数据是一个list类型。(关于list会在后面详细讲解)#输出,a_list中的最大元素max_element=a_list[0]fori1tolen(a_list)–1do iflist[i]>max_element max_element=list[i]returnmax_element这里只是举一个例子,实际上,在Python中,如果要求一个列表的最大元素值,并不需要这么麻烦,只需要调用Python的内置函数max即可。当然算法的表示方法还有很多种,在这里只是选取了比较常用的3种进行讲解。3.1.2算法表示方法第三章程序流程控制编写程序到软件工程师的职责of3171.负责项目组开发或设计工作,能够按要求、高质量地完成开发或设计任务;

2.熟练掌握分析设计工具,按照规范的要求,编写设计文档;

3.按照设计功能,实现模块的代码编写和维护;

4.按照公司的规范进行编码,并对开发的代码进行单元测试;

5.负责项目开发过程中的技术攻关及运行中出现的技术问题。程序员编写程序要解决问题,明辨是非,服务于国家、社会和人民,要具有良好的道德素养→社会主义核心价值观做“四有”新人:要讲政治、有信念,政治合格;要讲规矩、有纪律,执行纪律合格;要讲道德、有品行,品德合格;要讲奉献、有作为,发挥作用合格第三章程序流程控制软件工程师良好的道德素养of318原则1:公众软件工程师的行为应与公众利益一致原则2:客户与雇主软件工程师应以他们的客户和雇主最大利益化的方式做事,与公众利益一致。原则3:产品软件工程师应当确保他们的产品以及相关的修改达到尽可能高的专业标准。原则4:判断软件工程师应当完整独立地进行自己的专业判断原则5

管理软件项目的经理和领导人员应赞成和促进对软件开发和维护合乎道德规范的管理原则6

职业在与公众利益一致的原则下,软件工程师应当保证其职业的完整和声誉原则7:同事软件工程师应当正直地去帮助他们的同事原则8:自身软件工程师的行为都应该从自身规范起,从而延伸到行业、乃至社会和未来,成为一个对代码构建世界有伟大贡献,对社会进步有卓越奉献的人。第三章程序流程控制软件工程师道德素养之反面案例of319华夏银行盗窃案华夏银行科技发展中心的前员工,其工作职责包括技术需求分析、功能规范编译、设计、开发、单元测试、集成测试等,其将一个计算机病毒程序植入华夏银行总部的核心系统,阻止跨银行ATM取款交易被包括在账户中,然后成功地将717.9万元存入自己的账户结果被判处有期徒刑10年6个月,罚金人民币11000元,剥夺政治权利2年邮政局信息被倒卖某程序员利用开发国家邮政局安监三期项目数据库之便,非法获取该数据库内公民个人信息15万余条,并将1万余条公民个人信息倒卖他人,非法获利785元,同时非法获取其他信息400余万条结果被判非法获取公民个人信息罪,判处有期徒刑一年,缓刑一年,并处罚金一万元阿里巴巴月饼事件2016年在阿里内部展开的中秋抢月饼活动中,四名程序员使用脚本,多刷了124盒月饼结果有多个相关涉事人员被开除第三章程序流程控制软件工程师道德素养之史上著名的后门of3110BackOrifice后门。这是史上第一个后门,也是它使得人们开始意识到后门存在的可能性。BackOrifice可以让运行Windows的计算机能够被远程操控。NSA“特定访问操作(TAO)”硬件后门。根据斯诺登提供的资料,NSA的“特定访问操作”项目就是NSA一个试图通过在硬件中植入后门的项目。除了在网络设备固件中加入后门,NSA还在不同的PC甚至PC附件如硬盘中加入了监控程序。Windows_NSAKEY后门。_NSAKEY的变量是一个1024位的公钥,人们怀疑微软为NSA提供了一些形式的后门,使得NSA能够访问Windows的一些加密数据甚至操作Windows本身。双椭圆曲线后门。又是NSA,双椭圆曲线后门可能是最隐蔽的后门了。通过一个在密码学中常用的随机数发生算法植入后门。理论上,Dual_EC_DRBG(双椭圆确定性随机数生成器)是NIST制定的一个标准,这里面存在一个很隐蔽的缺陷使得攻击者能够解密数据。在斯诺登揭密之后,人们才知道这个后门的存在,也知道了NSA通过干预标准的制定来达到在算法中植入后门的方式。美国国家安全局(NationalSecurityAgency,NSA)是美国政府机构中最大的情报部门第三章程序流程控制3.2顺序结构3.1算法概述3.3选择结构3.4循环结构of5611第三章程序流程控制3.2顺序结构of3112顺序结构是结构化程序设计中的基本结构,在该结构中,各语句或语句组按照出现的先后顺序依次执行,如图3.3所示。在选择结构和循环结构中,顺序结构也是组成部分。图3.3顺序结构流程图3.2.1顺序结构第三章程序流程控制3.2顺序结构of3113【例3.1】输入3个数,计算这三个数的平均值。a=float(input(“请输入a的值:”))b=float(input(“请输入b的值:”))c=float(input(“请输入c的值:”))f=(a+b+c)/3print(str.format(“三个数的平均值为:{:.2f}”,f))遵守规则,不插队,开车、结账排队时都要按顺序进行;3.2.1顺序结构第三章程序流程控制3.3选择结构3.2顺序结构3.1算法概述3.4循环结构of5614第三章程序流程控制3.3选择结构of3115用if语句可以构成选择结构。它根据给定的条件进行判断,以决定执行某个分支程序段。Python的if语句有三种基本形式。该结构形式为:

if条件:执行的操作1

执行的操作2其流程图如图3.4所示。

3.3.1if选择结构图3.4单分支选择结构流程图第三章程序流程控制3.3选择结构of3116该结构的意思是,如果条件为真则执行操作1和操作2。除了False(包括表达式的值为False),none,各种数字的类型的0以及空的序列和空的字典外,其余的都可以看成条件为真。需要注意的是,Python中如果后面的语句需要缩进,那么在该行代码末尾需要加冒号。由选择结构程序设计可知,凡事都要考虑周全,尊重事实,合理选择;一切从实际出发,实事求是;人的一生也面临很多选择,要慎重选择并承担抉择之后带来的后果,不要患得患失,要养成良好的逻辑性。在生活中“鱼和熊掌不可兼得”,千万不要做违背良心的事情,不要做有背社会公德的事情;抗击新冠病毒疫情期间,国家审时度势,科学规划,依据实际情况划分高风险区、中风险区和低风险区,不同类型区域采取有针对性的防范策略,最大化各方效率。3.3.1if选择结构第三章程序流程控制3.3选择结构of3117b=input()a=int(b)ifa%2==0:print('%d是偶数'%a)在上述例子中,如果想这个数在不是偶数的时候也将结果打印出来,就需要用到if…else结构,如下所示。当条件为真时,执行条件语句下的嵌套语句,否则的话执行else部分。b=input()#输入一个数a=int(b)#将输入转换成ifa%2==0:print('%d是偶数'%a)else:print('%d不是偶数'%a)可以看出if…else的语句结构为:if条件:

操作1else:操作2

3.3.1if选择结构第三章程序流程控制3.3选择结构of3118其流程图如图3.5所示。

3.3.1if选择结构图3.5双分支选择结构流程图即当满足条件时,执行操作1,条件不满足时,执行操作2。一个if只能和一个else搭配。第三章程序流程控制3.3选择结构of3119但有时候,所需要的结果不是一次选择能得到的,可能需要多次判断,这就需要用到if…elif…else结构了。if条件1:操作1elif条件2:操作2else:操作3其流程图如图3.6所示。

3.3.1if选择结构图3.6多分支选择结构流程图第三章程序流程控制3.3选择结构of3120在if…elif…else结构中,可以有多个elif语句,但只能有一个else语句,当所有的条件都为假时,才执行else部分。下面用一个例子说明下。【例3.3】判断输入的年份是否为闰年。str_year=input()#输入年份year=int(str_year)#将字符串转换成数字ifyear%400==0:print("%d是闰年"%year)elifyear%4==0andyear%100!=0:print("%d是闰年"%year)else:print("%d不是闰年"%year)与C等语言不同的是,Python中没有switch和case语句。但是Python可以用一系列的if、elif和else语句来达到相同的效果。

3.3.1if选择结构第三章程序流程控制3.3选择结构of3121当if语句的操作语句中还有if语句时就构成了选择结构的嵌套,就像下面这样:if条件1:if选择结构elif条件2:if选择结构else:

if选择结构但是在使用选择结构的嵌套时,要注意if和else的搭配,一对if和else一定要对齐。

3.3.2选择结构的嵌套第三章程序流程控制3.3选择结构of3122【例3.4】判断一个输入的数是否是偶数且能被3整除。a=input()#输入一个数字b=int(a)#转换成数字类型ifb%2==0:ifb%3==0:print("该数是偶数且能被3整除")else:print("该数是偶数但不能被3整除")else:ifb%3==0:print("该数不是偶数但能被3整除")else:print("该数不是偶数且不能被3整除")

3.3.2选择结构的嵌套第三章程序流程控制3.4循环结构3.2顺序结构3.3选择结构3.1算法概述of5623第三章程序流程控制3.4循环结构of3124有时候想让同一个指令重复执行多次,比如打印数字1~10:print(1)print(2)….print(10)这样的笨办法看起来好像也还能接受,那如果打印数字1~10000呢,这时候再用这种方法就不合适了,为了避免这种笨重的代码,就需要用到循环结构,接下来介绍几种循环结构。此外,还会介绍几种在循环中常用的的内置函数。

第三章程序流程控制3.4循环结构of3125【例3.5】用while循环结构打印数字1到10。x=1whilex<=10:print(x)x+=1是不是和之前的代码比起来,简洁了很多。while循环结构的一般形式为:while表达式:操作语句

3.4.1while循环结构第三章程序流程控制3.4循环结构of3126其流程图如图3.7所示。其中,表达式是循环条件,操作语句为循环体。条件为真时执行循环体内操作,当执行外一次操作后,再对条件进行判断,如果条件继续为真,则继续执行循环体,然后再判断条件,直到条件为假退出while循环。简而言之,只要顶端的表达式为真,就会重复执行语句块。如果表达式一开始就为假,则循环体语句块不会执行。注意表达式后面是有冒号的。前面提到了,后面代码需要缩进的都需要以冒号结尾。

3.4.1while循环结构图3.7while循环结构流程图第三章程序流程控制3.4循环结构of3127当想执行一个无限循环操作时,可以用whileTrue:,这样条件就能一直为真了。【例3.6】无限循环例子。>>>whileTrue: print('python')pythonpythonpythonpythonpython…循环条件可以是任意的对象,因为前面已经介绍过了,在Python中,所有的对象都有对应的bool值。3.4.1while循环结构第三章程序流程控制3.4循环结构of3128用while循环结构已经可以实现很多循环了,但如果想遍历一个序列中的元素时(关于序列会在后面的章节中讲到,这里可以把它理解成一个集合)就可以使用for循环结构。for循环结构的一般格式为:forxinobject:语句块其流程图如图3.8所示。3.4.2for循环结构图3.8for循环结构流程图第三章程序流程控制3.4循环结构of3129其中,x是定义的一个用来赋值的变量,object是要遍历的对象。for循环结构执行时,会逐个将序列对象中的值赋给x,就可以在语句块中对x进行操作。X的作用域只zaifor语句里(作用域后面会讲到),可以在循环主体中对x进行修改。但当回到循环顶端时,又会被自己赋值成下一个元素。下面用一个例子来说明一下。【例3.7】用for循环将数字1~5打印出来。>>>forxinrange(1,6):...print(x)...123453.4.2for循环结构第三章程序流程控制3.4循环结构of3130当需要遍历某个序列对象时,应优先选用for循环结构。当把表达式的值作为循环条件时应当选用while循环。如果不需要每个元素都访问或者想要改变列表的值,这时候也应该选用while循环。Python的内置函数enumerate()来实现遍历元素,它多用于在for循环中得到计数。对于一个可迭代的对象,enumerate()将其组成一个索引序列,利用它可以同时获得索引和值。enumerate()返回的是一个enumerate对象。>>>list_a=['a','b','c','d']>>>print(type(enumerate(list_a)))<class'enumerate'>3.4.2for循环结构第三章程序流程控制3.4循环结构of3131【例3.8】enumerate()的用法。>>>list_a=['a','b','c','d']>>>forindex,datainenumerate(list_a): print(index,data)0a1b2c3d>>>需要注意的是,for循环只是把序列中的对象的值赋给了另一个对象x,也就是说对x的值进行的操作不会影响序列中对象的值,除非直接对序列进行操作。3.4.2for循环结构第三章程序流程控制3.4循环结构of3132>>>list_a=['a','b','c','d']>>>fordatainlist_a: data='d' print(data)dddd>>>print(list_a)['a','b','c','d']>>>foriinrange(len(list_a)):list_a[i]='d'>>>print(list_a)['d','d','d','d']>>>3.4.2for循环结构第三章程序流程控制3.4循环结构of3133任何序列都适用于for循环,上面已经看到了for循环可以用于列表,此外还可以用于字符串,元组等,甚至字典和文件都可以用for循环。【例3.9】for循环用于字符串。>>>string='helloworld'>>>foriinstring: print(i)helloworld>>>3.4.2for循环结构第三章程序流程控制3.4循环结构of3134break和continue语句需要嵌套在循环结构中才能起作用。break语句用来跳出所在的最近的一个循环结构,而continue语句则是跳到所在的最近的循环结构的首行即开头处重新判断条件。下面是两个例子。【例3.10】打印数字0~5。>>>x=0>>>whileTrue:...ifx>5:...break...print(x,end='')...x+=1...012345在这里虽然用了whileTrue是一个无限循环,但因为当x>5后,break语句执行,跳出了这个无限循环。3.4.3break和continue语句第三章程序流程控制3.4循环结构of3135【例3.11】打印数字0~5中除了3之外的数。>>>forxinrange(6):...ifx==3:...continue...print(x,end='')...01245可以发现在continue语句执行后,直接跳到了循环的开头,进行下一次操作。而没有执行print语句。3.4.3break和continue语句第三章程序流程控制3.4循环结构of3136循环里的else语句是在循环正常结束时才执行的,非正常结束即通过break语句结束循环。【例3.12】判断输入的一个数是否为素数。importmathnum=int(input('输入一个正整数,判断是否是素数:'))ifnum<0:print("输入非法")elifnum==1:print("%d既不是素数也不是合数"%num)else::foriinrange(2,int(math.sqrt(num))+1):#math.sqrt(x)是求x的开方值

ifnum%i==0:print("%d不是素数"%num)breakelse:print("%d是素数"%num)3.4.4else语句第三章程序流程控制3.4循环结构of3137当循环正常结束时,说明输入的数,除了1和此整数自身外,没法被其他自然数整除,所以是一个素数,就需要执行else语块,而当通过break跳出循环时就说明不是素数,也就不需要执行else语块了。循环else语句和哪一个while或for循环搭配就要与只保持相同的缩进。如果在else语句之前有多个循环结构且都与else语句缩进相同,那么else语句便是与在它前面且离它最近那一个循环结构搭配。这里出现了一个import语句,是来导入Python的包,后面章节会讲到。如果循环没有被执行过,循环else语句也会执行,因为没有执行过break语句。当首行条件一开始就为假时就会出现这种情况。如果想在一个序列中搜索某一个元素也可以使用循环else语句。3.4.4else语句第三章程序流程控制3.4循环结构of3138list_a=['a','b','c','d','e']forindex,chinenumerate(list_a):ifch=='f':print(index)breakelse:print('未找到')3.4.4else语句第三章程序流程控制3.4循环结构of3139pass语句是无运算的占位语句,当语法需要语句但又没有实用的语句可以写时,就可以用pass语句占位。例如,想要一个无限循环,但每次迭代时又什么都不做,就可以在循环体内用pass语句。当在定义函数时,可以先用pass语句填充函数体。待以后再用真正的函数体代替pass语句。因为无法使函数体为空而不产生语法错误,就只能先用pass代替。此外,如果想忽略try语句捕获的异常,也可以使用pass语句,至于异常会在后面讲到。3.4.5pass语句第三章程序流程控制3.4循环结构of3140就像选择结构可以嵌套一样,循环结构也可以进行嵌套,可以

温馨提示

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

评论

0/150

提交评论