第3章-Python选择与循环_第1页
第3章-Python选择与循环_第2页
第3章-Python选择与循环_第3页
第3章-Python选择与循环_第4页
第3章-Python选择与循环_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

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

文档简介

第3章选择与循环,3.1条件表达式,算术运算符:+、-、*、/、/、%、*、关系运算符:、=、!=,可以连续使用,如print1print13Falseprint12True测试运算符:in、notin、is、isnot逻辑运算符:and、or、not,注意短路求值位运算符:、&、|、,3.1条件表达式,在选择和循环结构中,条件表达式的值只要不是False、0(或0.0、0j等)、空值None、空列表、空元组、空集合、空字典、空字符串、空range对象或其他空迭代对象,Python解释器均认为与True等价。从这个意义上来讲,几乎所有的Python合法表达式都可以作为条件表达式,包括含有函数调用的表达式。,3.1条件表达式,if3:#使用整数作为条件表达式print(5)5a=1,2,3ifa:#使用列表作为条件表达式print(a)1,2,3a=ifa:print(a)else:print(empty)empty,3.1条件表达式,i=s=0whileiprint(s)55i=s=0whileTrue:#使用常量True作为条件表达式s+=ii+=1ifi10:breakprint(s)55s=0foriinrange(0,11,1):s+=iprint(s)55,3.1条件表达式,比较特殊的运算符还有逻辑运算符“and”和“or”,这两个运算符具有短路求值或惰性求值的特点,简单地说,就是只计算必须计算的表达式的值。在设计条件表达式时,在表示复杂条件时如果能够巧妙利用逻辑运算符“and”和“or”的短路求值或惰性求值特性,可以大幅度提高程序的运行效率,减少不必要的计算与判断。以“and”为例,对于表达式“表达式1and表达式2”而言,如果“表达式1”的值为“False”或其他等价值时,不论“表达式2”的值是什么,整个表达式的值都是“False”,此时“表达式2”的值无论是什么都不影响整个表达式的值,因此将不会被计算,从而减少不必要的计算和判断。,3.1条件表达式,在设计条件表达式时,如果能够大概预测不同条件失败的概率,并将多个条件根据“and”和“or”运算的短路求值特性进行组织,可以大幅度提高程序运行效率。例如,下面的函数用来使用用户指定的分隔符将多个字符串连接成一个字符串,如果用户没有指定分隔符则使用逗号。defJoin(chList,sep=None):return(sepor,).join(chList)chTest=1,2,3,4,5Join(chTest)1,2,3,4,5Join(chTest,:)1:2:3:4:5Join(chTest,)12345,3.1条件表达式,另外,在Python中,条件表达式中不允许使用赋值运算符“=”,避免了其他语言中误将关系运算符“=”写作赋值运算符“=”带来的麻烦,例如下面的代码,在条件表达式中使用赋值运算符“=”将抛出异常,提示语法错误。ifa=3:SyntaxError:invalidsyntaxif(a=3)and(b=4):SyntaxError:invalidsyntax,3.2.1单分支选择结构,if表达式:语句块a,b=input(Inputtwonumber:)ifab:a,b=b,aprinta,b,3.2.2双分支结构,if表达式:语句块1else:语句块2chTest=1,2,3,4,5ifchTest:print(chTest)else:print(Empty)1,2,3,4,5,3.2.2双分支结构,Python还支持如下形式的表达式:value1ifconditionelsevalue2当条件表达式condition的值与True等价时,表达式的值为value1,否则表达式的值为value2。另外,在value1和value2中还可以使用复杂表达式,包括函数调用和基本输出语句。下面的代码演示了上面的表达式的用法,从代码中可以看出,这个结构的表达式也具有惰性求值的特点。a=5print(6)ifa3elseprint(5)6print(6ifa3else5)6b=6ifa13else9b9,3.2.2双分支结构,x=math.sqrt(9)if53elserandom.randint(1,100)#此时还没有导入math模块Traceback(mostrecentcalllast):File,line1,inx=math.sqrt(9)if53elserandom.randint(1,100)NameError:namemathisnotdefinedimportmath#此时还没有导入random模块,但由于条件表达式53的值为True,所以可以正常运行x=math.sqrt(9)if53elserandom.randint(1,100)#此时还没有导入random模块,由于条件表达式23的值为False,需要计算第二个表达式的值,因此出错x=math.sqrt(9)if23elserandom.randint(1,100)Traceback(mostrecentcalllast):File,line1,inx=math.sqrt(9)if23elserandom.randint(1,100)NameError:namerandomisnotdefinedimportrandomx=math.sqrt(9)if23elserandom.randint(1,100),3.2.3多分支结构,if表达式1:语句块1elif表达式2:语句块2elif表达式3:语句块3else:语句块4其中,关键字elif是elseif的缩写。,3.2.3多分支结构,下面的代码演示了利用多分支选择结构将成绩从百分制变换到等级制的用法。deffunc(score):ifscore100:returnwrongscore.must=90:returnAelifscore=80:returnBelifscore=70:returnCelifscore=60:returnDelifscore=0:returnEelse:returnwrongscore.must0,3.2.4选择结构的嵌套,if表达式1:语句块1if表达式2:语句块2else:语句块3else:if表达式4:语句块4注意:缩进必须要正确并且一致。,3.2.4选择结构的嵌套,deffunc(score):degree=DCBAAEifscore100orscore=0:returndegreeindexelse:returndegree-1,3.2.5选择结构应用,例1:面试资格确认。age=24subject=计算机college=非重点if(age25andsubject=电子信息工程)or(college=重点andsubject=电子信息工程)or(age=28andsubject=计算机):print(恭喜,你已获得我公司的面试机会!)else:print(抱歉,你未达到面试要求),3.2.5选择结构应用,例2:用户输入若干个分数,求所有分数的平均分。每输入一个分数后询问是否继续输入下一个分数,回答“yes”就继续输入下一个分数,回答“no”就停止输入分数。,3.2.5选择结构应用,endFlag=yess=0whileendFlag.lower()=yes:x=input(请输入一个正整数:)x=eval(x)ifisinstance(x,int)and0forninrange(100,1,-1):foriinrange(2,n):ifn%i=0:breakelse:print(n)break97删除上面代码中最后一个break语句,则可以用来输出100以内的所有素数。forninrange(100,1,-1):foriinrange(2,n):ifn%i=0:breakelse:print(n,end=)9789837973716761595347434137312923191713117532,3.4break和continue语句,警惕continue可能带来的问题:i=0whileiforiinrange(10):ifi%2=0:continueprinti,13579,3.4break和continue语句,foriinrange(10):ifi%2=0:i+=1#没有用呀没有用continueprinti,13579,3.4break和continue语句,每次进入循环时的i已经不再是上一次的i,所以修改其值并不会影响循环的执行。foriinrange(7):printid(i),:,i10416692:010416680:110416668:210416656:310416644:410416632:510416620:6,3.5案例精选,例1:计算1+2+3+100的值。s=0foriinrange(1,101):s=s+iprint1+2+3+100=,sprint1+2+3+100=,sum(range(1,101),3.5案例精选,例2:输出序列中的元素。a_list=a,b,mpilgrim,z,examplefori,vinenumerate(a_list):print列表的第,i+1,个元素是:,v,3.5案例精选,例3:求1100之间能被7整除,但不能同时被5整除的所有整数。foriinrange(1,101):ifi%7=0andi%5!=0:printi,3.5案例精选,例4:输出“水仙花数”。所谓水仙花数是指1个3位的十进制数,其各位数字的立方和等于该数本身。例如:153是水仙花数,因为153=13+53+33。foriinrange(100,1000):ge=i%10shi=i/10%10bai=i/100ifge*3+shi*3+bai*3=i:printi,3.5案例精选,例5:求平均分。score=70,90,78,85,97,94,65,80s=0foriinscore:s+=iprints*1.0/len(score)printsum(score)*1.0/len(score),3.5案例精选,例6:打印九九乘法表。foriinrange(1,10):forjinrange(1,i+1):printi,*,j,=,i*j,t,printn,3.5案例精选,例7:求200以内能被17整除的最大正整数。foriinrange(200,0,-1):ifi%17=0:printibreak,3.5案例精选,例8:判断一个数是否为素数。n=input(Inputainteger:)Inputainteger:17m=int(math.sqrt(n)+1)foriinrange(2,m):ifn%i=0:printNobreakelse:printYes,3.5案例精选,例9:鸡兔同笼问题。假设共有鸡、兔30只,脚90只,求鸡、兔各有多少只。forjiinrange(0,31):if2*ji+(30-ji)*4=90:print(ji:,ji,tu:,30-ji),3.5案例精选,例10:编写程序,输出由1、2、3、4这四个数字组成的每位数都不相同的所有三位数。digits=(1,2,3,4)foriindigits:forjindigits:forkindigits:ifi!=jandj!=kandi!=k:print(i*100+j*10+k),3.5案例精选,从代码优化的角度来讲,上面这段代码并不是很好,其中有些判断完全可以在外层循环来做,从而提高运行效率,即下面形式的代码运行效率比上面的一段代码要高一些,您可以自行测试。digits=(1,2,3,4)foriindigits:forji

温馨提示

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

最新文档

评论

0/150

提交评论