【本章导读】
进行程序设计时,复杂问题的求解通常需要通过流程进行控制。程序的流程控制可归纳为三种:顺序结构、分支(选择)结构和循环结构。每一个结构化的程序都可以由这三种结构组合或嵌套而成。这种程序设计方法,使程序具有良好的可读性和可维护性。
本章在讲解常用运算的基础上,应用一系列数学问题的求解案例,详细介绍了Python中利用for
关键字对range()函数产生的整数序列进行确定次数循环的方法和具体应用,介绍了利用while关键字实现循环次数不确定问题的求解方法。
介绍了用if…elif…else语句实现分支结构程序设计。简单介绍了利用pass、continue和break语句实现流程跳转的方法。
简单介绍了异常处理的概念和利用异常处理提高程序健壮性和容错性的程序设计方法。
【本章要点】
●常用运算及运算优先级
数值运算: +、-、*、/、//、%、** 真值测试:None,False, 0, 0.0, 0j, Decimal(0), Fraction(0, 1),'', (), [], {}, set(), range(0) 布尔运算:x or y, x and y, not x 比较运算:>、 >=、 <、 <=、 ==、 !=、 is、 is not 成员运算:x in s 、x not in s
●for…in range()循环结构
for 循环变量 in 可遍历对象: 重复执行的语句块 [else]: 循环正常结束后需执行的语句 for i in range(5): # 遍历range print(i) else: print('循环正常结束') for c in string: # 遍历字符串 print(c) for item in list: # 遍历列表、元组、字典、集合等 print(item) for line in file: # 遍历文件对象 print(line)
while循环结构的流程控制
while 条件表达式: 重复执行的语句块 [else]: # 只有当循环正常结束时,else子句中的语句才能被执行 循环正常结束后需执行的语句
●流程跳转语句的功能与应用
break 跳过当前循环中未执行的次数,提前结束当前层次循环 continue 跳过本次循环中剩余语句的执行,提前进入下一次循环 pass 跳过执行或占位
●分支语句
if 条件表达式1: # if 必须有且只能有一个 语句块1 [elif 条件表达式2: # 有0个或多个 语句块2] [elif 条件表达式3: 语句块3] [……] [else: # 0个或1个 语句块n]
●异常处理的概念与应用
except <异常名称1>: <语句块2> # 如果在try部份引发了异常名称1时执行的语句块 [except <异常名称2>: <语句块3>] # 如果在try部份引发了异常名称2时执行的语句块 [else: <语句块4>] # 没有异常发生时执行的语句块 [finally: <语句块5>] # 无论有没有异常都会执行的语句块
思维导图:
真值测试
对象出现在if或while语句中的条件表达式中, 或是作为布尔运算的操作数时,对象值表现为 True或False
值为False的内置对象: 被定义为假值的常量 任何数值类型的数字零 空的序列和多项集
会被视为假值的内置对象包括:
假值常量: None和False
print(bool(False)) # False print(bool(None)) # False
会被视为假值的内置对象包括: 任何数值类型的数字零:
0, 0.0, 0j, Decimal(0), Fraction(0, 1) print(bool(0.0)) # False print(bool(0j)) # False print(bool(0)) # False
会被视为假值的内置对象包括: 空的序列和多项集,len()测试长度为0: 空字符串’', 空元组(), 空列表[], 空字典{},
空集合set(), range(0)
print(bool('')) # 空字符串,False print(bool([])) # 空列表,False print(bool(())) # 空元组,False print(bool({})) # 空字典,False print(bool(set())) # 空集合,False print(bool(range(0))) # 空range,False
除上述对象外,所有其他对象的真值测试结果都为True
print(bool(0.00001)) # 非0浮点数 print(bool([1])) # 非空列表 print(bool((1,))) # 非空元组 print(bool('me')) # 非空字符串 print(bool({1, 2, 3})) # 非空集合 print(bool(range(5))) # 非空range print(bool({'tom': 99, 'jerry': 86})) # 非空字典
比较运算
用于比较两个值,确定它们之间的关系
结果为逻辑值,即True 或False
8 种比较运算:
2 种一致性比较(==、!=)
4 种次序比较(<、>、<=、>=)
2 种标识号比较(is 和is not)
比较运算符可以连续使用
例如:x < y <= z 90 <= score <= 100 等价于 x < y andy <= z score >= 90 and score <= 100
数值类型会根据数字大小和正负进行比较
print(100 > 99) # True print(3.14> 3.141) # False print(1.0==1) # True,值相等的不同对象 整数和浮点数可以跨类型比较 print(1e18 == 1e18 + 10) # True 大浮点数比较精度影响结果
字符串比较根据其字符的Unicode 码数字值大小
按字典顺序进行
print('ji lin' > 'ji an') # True print([ord(y) for y in 'ji lin’]) print([ord(x) for x in 'ji an']) ord()获取字符Unicode 码数字值 [106, 105, 32, 108, 105, 110] [106, 105, 32, 97, 110]
元组、列表和range等序列只可进行类型内部的比较
比较方法是依次比较元素的值
print([1, 2, 3, 4] > [1, 2, 3])# True print((1, 2, 3, 4) > (1, 2, 3)) # True print(range(5) == range(0,5)) # True print([1, 2, 3, 4] > [3, 2, 3]) # False print((3, 2, 3) > (1, 2, 3)) # True
None和任何其他的数据类型的一致性比较永远返回False
// An highlighted block var foo = 'bar';print(range(0) == None)#RangeFalse print([] == None)# 空列表,False print('' == None)# 空字串符,False print(0 == None)# 整数0,False
运算符is 和is not 用于检测对象的标识号是否相同
仅当id(x) == id(y)时,x is y 结果为True
print(id(5) == id(5.0)) # False print(id(5),id(5.0)) # 21975364018402197543023344 print(5 is 5.0) # False print(5 == 5.0) # True,值相等