《Python语言程序设计》ppt章节3_第1页
《Python语言程序设计》ppt章节3_第2页
《Python语言程序设计》ppt章节3_第3页
《Python语言程序设计》ppt章节3_第4页
《Python语言程序设计》ppt章节3_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

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

文档简介

第3章Python控制结构3.1选择结构3.2random库生成随机数3.3循环结构3.4异常3.5常用算法3.1选择结构选择结构,让程序根据条件选择不同的分支运行【例3-1】输入半径,如果半径大于0,求圆的周长和面积,并输出。importmathr=eval(input("请输入r:"))ifr>0:s=math.pi*r*rc=2*math.pi*rprint("{}{:.2f}".format("圆的面积是:",s))print("{}{:.2f}".format("圆的周长是:",c))请输入r:5圆的面积是:78.54圆的周长是:31.42一、选择结构条件3.1选择结构一、条件表达式1、关系运算符Python操作符数学运算符名称例题结果<

<

小于5<0Fasle<=≤小于等于5<=5True>

>

大于5>5False>=≥大于等于5>=5True===等于5==3False!=≠不等于5!=3True3.1选择结构2、布尔类型也称逻辑型,表示仅有两个取值的数据,两个值为True(真)和False(假)。

本质上Python用1表示True,0表示False。3、布尔类型和整型的转换int函数可以把布尔类型转换成整型bool函数可以把整型转换成布尔类型>>>int(True)1>>>int(False)0>>>bool(0)False>>>bool(4)True3.1选择结构4、布尔类型和整型的比较>>>True>9False>>>True==1True>>>False>8False>>>False==0True3.1选择结构5、Python允许连续比较数据>>>3!=4True>>>3<4<5True>>>3>4<5False>>>3<4!=5True3.1选择结构6、字符串数据的关系运算>>>"abc"<"abcd"True>>>"cbc">"abcd"True>>>"e">"abc"True3.1选择结构二、单分支结构1、语法:if条件表达式: 语句块#注意,语句块一定要向右缩进2、执行过程:3.1选择结构【例3-2】输入数x,判断它是不是偶数,如果x是偶数,输出“x是偶数”,否则,不进行任何操作。x=eval(input("请输入需要判断数x:"))ifx%2==0:print("{}是偶数".format(x))【第一次运行,输入8】请输入需要判断数x:88是偶数【第二次运行,输入7】请输入需要判断数x:73.1选择结构三、双分支结构1、语法:if条件表达式:语句块1else:语句块22、执行过程:3.1选择结构【例3-3】输入一个数x,判断它是奇数还是偶数,并输出相应的结果。x=eval(input("请输入需要判断数x:"))ifx%2==0:print("{}是偶数".format(x))else:print("{}是奇数".format(x))【第一次运行,输入8】请输入需要判断数x:88是偶数【第二次运行,输入5】请输入需要判断数x:55是奇数3.1选择结构四、多分支结构1、语法:if条件表达式1:

语句块1elif条件表达式2:

语句块2……elif条件表达式n:

语句块n

else:

语句块n+12、执行过程:3.1选择结构【例3-5】编写一个计算体重指数BMI的程序,并根据分段函数,判断肥胖程度。(演示程序)

3.1选择结构五、if嵌套【例3-6】输入三个数a、b、c,求最大值3.1选择结构三个数最大值代码:a=eval(input(("请输入a:")))b=eval(input(("请输入b:")))c=eval(input(("请输入c:")))ifa>b:ifa>c:print(a,"最大")else:print(b,"最大")else:ifb>c:print(b,"最大")else:print(c,"最大")3.1选择结构六、分支结构的常见问题r=-5ifr>=0:s=3.14*r*rprint("圆的面积是:",s)r=-5ifr>=0:s=3.14*r*rprint("圆的面积是:",s)两段程序的区别:3.1选择结构七、逻辑运算符和表达式(1)逻辑与真值表(表中x=5,y=6)p1p2p1andp2例题结果FalseFalseFalsex<0andy<0FalseFalseTrueFalsex<0andy>0FalseTrueFalseFalsex>=0andy==0FalseTrueTrueTruex>0andy>0True3.1选择结构【例3-7】编写程序,输入身高和体重,求bmi。要求,首先判断“身高或者体重是否小于等于0”,若如此,程序给出“输入的数据错误”的提示;否则两个数据必然都是正数,计算bmi,并给出肥胖程度提示。(演示程序)weight<=0或者height<=0weight<=0orheight<=03.1选择结构八、混合运算Python允许数值数据、字符串数据、布尔数据以及各自的运算符之间的混合运算运算各种运算之间也有优先级,其中“数学运算”高于“关系运算”高于“逻辑运算”>>>3+5>2+1and"a">"b"#相当于((3+5)>(2+1))and("a">"b")False>>>2004%4==0#相当于(2004%4)==0True3.1选择结构九、短路逻辑and运算:比如xandy,仅当x和y都为真时,表达式xandy才为真。如果x为假,xandy这个表达式将立即返回假,而忽略y。实际上如果x为假,这个表达式将返回x,否则返回y。这种行为称为短路逻辑,即在有些情况下,and运算将“绕过”第二个值。or运算:比如xory,如果x为真,就返回x,否则返回y。3.1选择结构短路逻辑例题>>>Trueand3+2#第一个操作数为真,直接返回第二个操作数5>>>Falseand3+2#第一个操作数为假,忽略3+2,直接返回第一个操作数#第一个操作数为0,解读为假,忽略3+2,直接返回第一个操作数>>>0and3+20>>>Falseor5*6#第一个操作数为假,直接返回第二个操作数30#第一个操作数为5,解读为真,忽略第二个操作数,直接返回第一个操作数>>>3+2or053.1选择结构十、实例——判断闰年【例3-8】编写程序,判断输入年份是否为闰年。闰年满足下列两个条件之一:x可以被4整除,但不能被100整除;x可以被400整除。x=eval(input("请输入年份:"))ifx%4==0andx%100!=0orx%400==0:print(x,"是闰年")else:print(x,"是平年")3.2random库生成随机数【例3-9】猜数字游戏。计算机产生一个三位随机正整数x,玩家猜x是多少,程序根据游戏玩家猜的数字与x的大小关系给出“大了”、“小了”、“恭喜猜对了!”的提示信息。fromrandomimportrandintx=randint(100,999)y=eval(input("请输入:"))ify<x:print("小了")elify==x:print("恭喜您,猜对了")else:print("大了")print(sum)3.2random库生成随机数random库常用随机数生成函数函数描述seed(a=None)初始化给定的随机数种子,默认为当前系统时间random()生成一个[0.0,1.0)之间的随机小数randint(a,b)生成一个[a,b]之间的整数randrange(m,n[,k])生成一个[m,n)之间以k为步长的随机整数getrandbits(k)生成一个k比特长的随机整数uniform(a,b)生成一个[a,b]之间的随机小数3.3循环结构例:打印输出一行“IlovePython!”print("IlovePython!")例:打印输出一百行“IlovePython!”print("IlovePython!")……print("IlovePython!")3.3循环结构一、while循环1、语法:whi1e条件表达式:循环体#需要缩进2、执行过程:3.3循环结构3、打印100行:count=1whilecount<=100:print("IlovePython!")count=count+1打印100行流程图:3.3循环结构【例3-12】辗转相除法求两个正整数的最大公约数。算法:① r=m%n;② 若r!=0,执行③,否则执行⑤;③ m=n,n=r;④ 返回①,重新执行①;⑤ 输出最大公约数n。3.3循环结构【例3-12】辗转相除法求两个正整数的最大公约数代码m=eval(input("请输入m:"))n=eval(input("请输入n:"))r=m%nwhiler!=0:m=nn=rr=m%nprint("最大公约数是:",n)3.3循环结构二、for循环for循环索引变量in可迭代对象: 循环体#向右缩进1、语法:元素可以被单独提取出来的对象。比如字符串3.3循环结构strs="Python"forsinstrs:print(s,end=",")2、【例3-13】用for语句遍历字符串“Python”3.3循环结构产生一个可迭代对象,这个可迭代对象是一个有序数列,此数列以步长step为间隔,产生[start,end)半开区间内的一系列数。其中,start和step是可选参数。如果省略start,表示初始值从0开始;省略step,表示步长为1。3、range函数3.3循环结构3、range函数例题产生的序列range(5)[0,1,2,3,4]range(5,10,2)[5,7,9]range(-2,10,3)[-2,1,4,7]range(2,-10,-3)[2,-1,-4,-7]range(2,-10,3)空3.3循环结构4、【例3-14】利用for循环求1~100(包括100)以内的所有偶数的和。sum=0foriinrange(2,101,2):sum=sum+iprint(sum)3.3循环结构三、跳出循环——break语句break语句用于退出for、while循环,即提前结束循环,它通常和if一起使用。【例3-16】阅读如下程序,判断其输出结果。foriinrange(10):print(i)breakprint("循环里的print函数只执行一次!")3.3循环结构【例3-17】输入正整数m,判断此数是否为素数。(演示程序)所谓素数(或称质数),指只能被1和自身整除的数。判断m是否为素数,只要判断m可否被[2,m-1]之中的任何一个整数整除。如果m不能被此范围内的任意一个数整除,那么m是素数;否则,m是合数。3.3循环结构四、continue语句continue用作结束本次循环,即跳过循环体内continue后面尚未执行的语句,重新返回到循环的起始处,并根据循环条件判断是否执行下一次循环【例3-18】阅读如下程序,判断其输出结果。i=0whilei<10:i=i+1ifi%2==0:continueprint(i,end=",")3.3循环结构五、else子句for和while语句可以附带一个else子句。else子句仅在没有调用break时执行。其语法如下:for循环索引值in序列:循环体语句块1else:语句块2whi1e条件表达式:循环体语句块1else:语句块23.3循环结构【例3-19】输入一个数m,判断此数是否素数。使用else子语句。m=eval(input("请输入m:"))foriinrange(2,m):ifm%i==0:print("不是素数")

breakelse:print("是素数")3.3循环结构六、循环的嵌套在一个循环体内又包含另一个循环的结构,称为循环的嵌套,也叫多重循环结构【例3-20】利用循环嵌套打印九九乘法表。foriinrange(1,10):forjinrange(1,i+1):print("{:1d}*{:1d}={:2d}".format(i,j,i*j),end="")print()3.3循环结构【3-21】求出100以内的所有素数,并打印输出,一行打印10个。num=0forminrange(2,100):foriinrange(2,m-1):ifm%i==0:breakelse:num=num+1print(m,end=",")ifnum%10==0:print()3.4异常1、运行期间,检测到的影响程序正常执行的事件被称为异常。>>>1%0Traceback(mostrecentcalllast):File"<pyshell#0>",line1,in<module>1%02、常用异常如下:一、异常的概念:3.4异常异常名称描述Exception常规异常的基类StopIteration迭代器没有更多的值FloatingPointError浮点计算错误OverflowError数值运算结果太大无法表示ZeroDivisionError除数为0AttributeError属性引用或赋值失败EOFError当input()函数在没有读取任何数据的情况下达到文件结束条件(EOF)时引发ImportError导入模块/对象失败NameError未声明/初始化对象SyntaxError语法错误TypeError对类型无效的操作ValueError传入无效的参数3.4异常二、异常的捕获使用try/except语句来捕获异常语法:try:

语句块0#需要检测异常的代码except异常1:语句块1#如果try部分引发了异常1则执行except异常2:语句块2#如果try部分引发了异常2则执行⋯⋯except异常n:语句块n#如果try部分引发了异常2则执行else:

语句块n+1finally:

语句块n+23.4异常1、一个try语句可以包含一个except子句,用来处理特定的异常try:x=int(input("请输入x:"))y=int(input("请输入y:"))z=x%yexceptZeroDivisionError:print("除数为0了")else:print("没有异常")3.4异常2、一个try语句也可以包含多个except子句,分别来处理不同的特定的异常。但最多只有一个分支会被执行。try:x=eval(input("请输入x:"))y=eval(input("请输入y:"))z=x%yexceptZeroDivisionError:print("除数为0了")exceptValueError:print("数据输入错误")else:print("没有异常")3.4异常3、一个except子句可以同时处理多个异常,这些异常用圆括号组织成一个元组,但是这样不能确定异常种类。try:x=eval(input("请输入x:"))y=eval(input("请输入y:"))z=x%yexcept(ZeroDivisionError,ValueError,NameError):print("有异常")else:print("没有异常")3.4异常4、一个except子句同时处理多个异常,可以用as关键字获得异常try:x=eval(input("请输入x:"))y=eval(input("请输入y:"))z=x%yexcept(ZeroDivisionError,ValueError,NameError)ase:print(e)else:print("没有异常")3.4异常5、捕获所有异常try:

语句块#需要检测异常的代码except:语句块注意:这个结构可以捕获所有异常。看起来一劳永逸,但这既隐藏了考虑到的异常,也隐藏了没有考虑到的异常,可能会为后面的程序带来意想不到的状况,所以要慎重使用。3.5常用算法算法是指解题方案的准确而完整的描述,是有序、清晰的指令序列,代表着用系统的方法描述解决问题的策略机制。一、枚举法基本思路:

对于要解决的问题,列举出它的所有可能的情况,逐个判断有哪些可能的情况是满足问题条件的结果,从而得到问题的解。3.5常用算法一、枚举法求解步骤:① 确定枚举对象和枚举范围;② 设定判断条件;③ 按照顺序一一列举所有的可能,逐个判断每种可能是否满足判断条件。3.5常用算法【例3-23】韩信点兵。韩信率领着1500名将士同楚军交战,大败楚军。当韩信率领剩下的兵士返回营地时,又有一队500人的楚军人马火速追来。此时韩信兵士数量大约在1000人到1100人之间。他命令士兵3人排成一排,结果多出2名;又命令士兵5人排成一排,结果多出3名,又命令士兵7人排成一排,结果又多出2名。韩信马上说道:“我军有1073名兵士”。编程验证韩信兵士的数量真的是1073名吗?3.5常用算法韩信点兵枚举算法描述:①确定枚举对象:枚举对象是兵士数量x,枚举范围的为区间[1000,1100];②设定判断条件:x%3==2andx%5==3andx%7==2;③枚举顺序:x从1000开始,逐渐累加。3.5常用算法韩信点兵枚举算法代码:x=1000whileTrue:ifx%3==2andx%5==3andx%7==2:print("韩信的兵士数量是:",x,"人")breakelse:x=x+13.5常用算法【例3-24】百钱百鸡问题。某人有100元钱,需要买100只鸡,其中公鸡3元一只,母鸡2元一只,小鸡1元三只。如果恰好花完100元钱,买100只鸡,并且公鸡、母鸡、小鸡至少各买一只,公鸡、母鸡、小鸡可以各买多少只?3.5常用算法百钱百鸡枚举算法描述:① 确定枚举对象:枚举对象是公鸡、母鸡和小鸡,其数量分别设为cock、hen和chick,枚举范围分别是1~33、1~50和1~300,因为3种鸡的和是确定的,因此可以只枚举公鸡和母鸡,chick=100-cock-hen;② 设定判断条件:一共花100元钱,所以所有可能的枚举情况必须满足:cock*3+hen*2+chick/3=100元③ 枚举顺序:每种鸡从1开始枚举,一直枚举到它的最大值。3.5常用算法百钱百鸡枚举算法代码:forcockinrange(1,34):forheninrange(1,51):chick=100-cock-henifcock*3+hen*2+chick/3==100:print("公鸡{}只,母鸡:{}只,小鸡:{}只".format(cock,hen,chick))3.5常用算法二、递推算法推法从已知的初始条件出发,依据某种递推关系,逐次推出所求的各个中间结果及最后结果。其中初始条件是问题本身已经给定的。递推算法的首要问题是得到相邻的数据项间的关系,即递推式。递推能使复杂运算转化为若干步重复的简单运算,充分发挥出计算机擅长重复处理的特点。3.5常用算法【例3-25】读书问题。小明读书,第一天读了全书的一半加2页,第二天读了剩下的一半加2页,以后天天如此,第六天读完了最后的三页,问全书多少页?

3.5常用算法

3.5常用算

温馨提示

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

评论

0/150

提交评论