第3章 选择与循环.pptx
《第3章 选择与循环.pptx》由会员分享,可在线阅读,更多相关《第3章 选择与循环.pptx(77页珍藏版)》请在三一文库上搜索。
1、3.1 条件表达式v几乎所有的Python合法表达式都可以作为条件表达式.算术运算符:+、-、*、/、/、%、*关系运算符:、=、=、!=,可以连续使用,如 12 13False 12True测试运算符:in、not in、is、is not逻辑运算符:and、or、not,注意短路求值位运算符:、&、|、3.1 条件表达式在选择和循环结构中,条件表达式的值只要不是False、0(或0.0、0j等)、空值None、空列表、空元组、空集合、空字典、空字符串、空range对象或其他空迭代对象,Python解释器均认为与True等价。3.1 条件表达式 if 3:#使用整数作为条件表达式 print
2、(5)5 a=1,2,3 if a:#使用列表作为条件表达式 print(a)1,2,3 a=if a:print(a)else:print(empty)empty3.1 条件表达式 i=s=0 while i print(s)55 i=s=0 while True:#使用常量True作为条件表达式 s+=i i+=1 if i 10:break print(s)55 s=0 for i in range(0,11,1):#遍历迭代对象中的所有元素 s+=i print(s)55 逻辑运算符and和or以及关系运算符具有惰性求值特点,只计算必须计算的表达式。3.1 条件表达式LK2K1K1K2
3、KLL(1)or,并联电路(2)and,串联电路(3)not,短路3.1 条件表达式以“and”为例,对于表达式“表达式1 and 表达式2”而言,如果“表达式1”的值为“False”或其他等价值时,不论“表达式2”的值是什么,整个表达式的值都是“False”,此时“表达式2”的值无论是什么都不影响整个表达式的值,因此将不会被计算,从而减少不必要的计算和判断。在设计条件表达式时,如果能够大概预测不同条件失败的概率,并将多个条件根据“and”和“or”运算的短路求值特性来组织先后顺序,可以大幅度提高程序运行效率。3.1 条件表达式n在Python中,条件表达式中不允许使用赋值运算符“=”。if
4、a=3:SyntaxError:invalid syntax if(a=3)and(b=4):SyntaxError:invalid syntax3.2.1 单分支选择结构if 表达式:语句块x=input(Input two number:)a,b=map(int,x.split()if a b:a,b=b,a#序列解包,交换两个变量的值print(a,b)3.2.2 双分支结构if 表达式:语句块1else:语句块2 chTest=1,2,3,4,5 if chTest:print(chTest)else:print(Empty)1,2,3,4,53.2.2 双分支结构nPython还支持
5、如下形式的表达式:value1 if condition else value2当条件表达式condition的值与True等价时,表达式的值为value1,否则表达式的值为value2。在value1和value2中还可以使用复杂表达式,包括函数调用和基本输出语句。这个结构的表达式也具有惰性求值的特点。a=5 print(6)if a3 else print(5)6 print(6 if a3 else 5)6 b=6 if a13 else 9 b93.2.2 双分支结构#此时还没有导入math模块 x=math.sqrt(9)if 53 else random.randint(1,100
6、)NameError:name math is not defined import math#此时还没有导入random模块,但由于条件表达式53的值为True,所以可以正常运行 x=math.sqrt(9)if 53 else random.randint(1,100)#此时还没有导入random模块,由于条件表达式23的值为False,需要计算第二个表达式的值,因此出错 x=math.sqrt(9)if 23 else random.randint(1,100)NameError:name random is not defined import random x=math.sqrt(9
7、)if 23 else random.randint(1,100)3.2.3 嵌套的分支结构if 表达式1:语句块1elif 表达式2:语句块2elif 表达式3:语句块3else:语句块4其中,关键字elif是else if的缩写。3.2.3 嵌套的分支结构n利用多分支选择结构将成绩从百分制变换到等级制。def func(score):if score 100:return wrong score.must=90:return A elif score=80:return B elif score=70:return C elif score=60:return D elif score=0
8、:return E else:return wrong score.must 03.2.3 嵌套的分支结构if 表达式1:语句块1 if 表达式2:语句块2 else:语句块3else:if 表达式4:语句块4注意:缩进必须要正确并且一致。3.2.3 嵌套的分支结构使用嵌套的选择结构实现百分制成绩到等级制的转换。def func(score):degree=DCBAAE if score 100 or score=0:return degreeindex else:return degree-1补充:构建跳转表实现多分支选择结构 使用列表、元组或字典可以很容易构建跳转表,在某些场合下可以更快速
9、地实现类似于多分支选择结构的功能。funcDict=1:lambda:print(You input 1),2:lambda:print(You input 2),3:lambda:print(You input 3)x=input(Input an integer to call different function:)func=funcDict.get(x,None)if func:func()else:print(Wrong integer.)3.2.4 选择结构应用例例3-3-1 1 面试资格确认。age=24subject=计算机college=非重点if(age 25 and su
10、bject=电子信息工程)or (college=重点 and subject=电子信息工程)or (age import calendar calendar.isleap(2016)True calendar.isleap(2015)False3.2.4 选择结构应用n或者使用下面的方法直接计算今天是今年的第几天 import datetime datetime.date.today().timetuple().tm_yday309 datetime.date(2019,11,5).timetuple().tm_yday3093.2.4 选择结构应用n也可以使用datetime模块提供的功能
11、来计算 today=datetime.date.today()todaydatetime.date(2019,9,8)firstDay=datetime.date(today.year,1,1)firstDaydatetime.date(2019,1,1)daysDelta=today-firstDay+datetime.timedelta(days=1)daysDelta.days2513.2.4 选择结构应用 datetime还提供了其他功能 now=datetime.datetime.now()nowdatetime.datetime(2019,9,8,22,50,32,872739)n
12、ow.replace(second=30)#替换日期时间中的秒datetime.datetime(2019,9,8,22,50,30,872739)now+datetime.timedelta(days=5)#计算5天后的日期时间datetime.datetime(2019,9,13,22,50,32,872739)now+datetime.timedelta(weeks=-5)#计算5周前的日期时间datetime.datetime(2019,8,4,22,50,32,872739)3.2.4 选择结构应用 now+datetime.timedelta(days=-2,seconds=35)
13、#差35秒两天前datetime.datetime(2019,9,6,22,51,7,872739)now+datetime.timedelta(weeks=-2,seconds=35)#差35秒两周前datetime.datetime(2019,8,25,22,51,7,872739)补充:补充:计算两个日期之间相差多少天。from datetime import datedef daysBetween(year1,month1,day1,year2,month2,day2):dif=date(year1,month1,day1)dif=dif-date(year2,month2,day2)
14、return dif.daysprint(daysBetween(2016,12,11,2016,11,27)print(daysBetween(2017,11,11,2016,12,6)3.2.4 选择结构应用3.2.4 选择结构应用 补充:补充:计算某年第n个周五是几月几号。from datetime import date,timedeltadef getDate(year,weeks,weekday):start=date(year,1,1)#查找第一个周weekday是1月几日 for i in range(7):if start.isoweekday()=weekday:break
15、 start=start+timedelta(days=1)return start+timedelta(weeks=weeks-1)print(getDate(2019,22,5)3.3.1 for循环与while循环Python提供了两种基本的循环结构语句while和for。while循环一般用于循环次数难以提前确定的情况,也可以用于循环次数确定的情况。for循环一般用于循环次数可以提前确定的情况,尤其是用于枚举序列或迭代对象中的元素。一般优先考虑使用for循环。相同或不同的循环结构之间都可以互相嵌套,实现更为复杂的逻辑。for循环和while循环都可以带else。3.3.1 for循环与
16、while循环while 条件表达式:循环体else:#如果循环是因为break结束的,就不执行else中的代码else子句代码块for 取值 in 序列或迭代对象:循环体else:else子句代码块3.3.2 循环结构的优化为了优化程序以获得更高的效率和运行速度,在编写循环语句时,应尽量减少循环内部不必要的计算,将与循环变量无关的代码尽可能地提取到循环之外。对于使用多重循环嵌套的情况,应尽量减少内层循环中不必要的计算,尽可能地向外提。3.3.2 循环结构的优化n优化前的代码:digits=(1,2,3,4)for i in range(1000):result=for i in digits
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第3章 选择与循环 选择 循环
链接地址:https://www.31doc.com/p-21712571.html