Python程序的组织结构
Python——程序的组织结构
顺序结构
即整体代码是按照从上至下,从左至右的顺序执行的
选择结构
对象的布尔值
布尔值即Ture 或者 False
每一个对象都有一个布尔值,使用内置函数bool()来获取该值
Python中的条件表达式就是通过判断对象的布尔值来确定下一步的代码执行流程的
- 布尔值为False的对象
- False
- 整数0、浮点数0.0、复数0j
- 空值None
- 空字符串、空列表、空元组、空字典、空集合
- 空range对象(一个可迭代对象,且不是迭代器对象)
- 其他空迭代对象
验证
b = bool(False)
print(b)
b = bool(0)
print(b)
b = bool(0.0)
print(b)
b = bool(0j)
print(b)
b = bool(None)
print(b)
b = bool(str())
print(b)
b = bool(list())
print(b)
b = bool(tuple())
print(b)
b = bool(dict())
print(b)
b = bool(set())
print(b)
b = bool(range(1, 0))
print(b)
#输出结果:
"""
False
False
False
False
False
False
False
False
False
False
False
"""
- 布尔值为True的对象
- 除了上面提到的布尔值为False的对象以外的所有对象
举几个例子
b = bool(map(str, []))
print(b)
b = bool(filter(None, []))
print(b)
#输出结果:
"""
True
True
"""
条件判断语句
在 Python 中,条件语句(Conditional Statements)又叫作判断语句,判断语句由 if、 elif 和 else 3 种语句组成
- if 为强制语句,可以独立使用
- elif 和 else 为可选语句,并且不能独立使用
- 与 if 和 elif 语句不同,else 后面不需要再给任何判断条件
判断语句配合布尔值,通过判断一条或多条语句的条件是否成立(True 或者 False),从而决定下一步的动作
- 如果判断条件成立(True),则执行 if 或 elif 语句下的代码
- 如果判断条件不成立(False),则执行 else 语句下的代码
- 如果判断条件不成立(False),并且没有 else 语句,则不做任何事情
嵌套 if 语句
- 在某一个条件成立(判定为 True)后,如果还需要检查其他子条件,就可以用嵌套 if 语句来完成
- 在嵌套 if 语句中,一组 if、elif 和 else 可以构造在另一组 if、elif 和 else 中
- 需要注意不同层级的条件判断语句的缩进需要不同
合理利用短路算法,可以避免一些异常的抛出
不合理的代码
num = input()
if num+1 < 10 and isinstance(num, int):
print(123)
else:
print(456)
#输入内容:'A'
#引发异常:can only concatenate str (not "int") to str
改进后的代码
num = input()
if isinstance(num, int) and num+1 < 10:
print(123)
else:
print(456)
#输入内容:'A'
#输出结果:456
条件表达式中不允许使用赋值运算符"="
如果使用赋值运算符"="会抛出异常,这是为了避免误写导致的程序运行错误
b = True
if b = False:
pass
#代码效果:SyntaxError: invalid syntax
选择结构的类型
- 单分支
if True:
print(123)
#输出结果:123
- 双分支
if False:
print(123)
else:
print(456)
#输出结果:456
- 多分支
if False:
print(123)
elif True:
print(456)
else:
print(789)
#输出结果:456
if False:
print(123)
elif False:
print(456)
else:
print(789)
#输出结果:789
- 选择结构的嵌套
if False:
print(123)
elif True:
if False:
print(456)
else:
print(789)
else:
print(101112)
#输出结果:789
循环结构
while语句
在 Python 中,while 语句用于循环执行一段程序,它和 if 语句一样,两者都离不开判断语句和缩进
每当写在 while 语句下的程序被执行一次,程序就会自动回到“顶上”(也就是 while 语句的开头部分),根据 while 后的判断语句的返回值来决定是否要再次执行该程序
- 如果判断语句的返回值为 True,则继续执行该程序
- 如果判断语句的返回值为 False,则该 while 循环随即终止,如此反复
while True
- while True 是一种很常见的 while 循环的用法
- 因为这里的判定条件的结果已经手动指定了是 True,意味着判定条件将永久成立,也就意味着while 下面的程序将会被无数次重复执行,从而引起“无限循环”(Indefinite Loop)的问题
- 为了避免无限循环,我们必须在程序代码中使用 条件判断语句 结合 break 语句来在满足一定条件时终止 while 循环
n = 0
while n<10:
n+=1
print(n, end = ' ')
#输出结果:1 2 3 4 5 6 7 8 9 10
for-in 语句
同为循环语句,for 语句的循环机制和 while 语句完全不同:while 语句需要配合判断语句来决定什么时候开始循环和中止循环,而 for 语句则用来遍历一组可迭代的序列,可迭代的序列包括字符串、列表、元组等
for-in语句就是用来进行元素遍历的,即for循环的结束条件就是可迭代对象的所有元素都遍历完毕,for循环的循环次数也是由可迭代对象的元素个数决定的(Python for循环的运行过程详见Python——迭代器)
- for循环遍历
in后面的对象表示被遍历的对象,必须为一个可迭代对象,for-in语句会依次取出遍历对象中的每一个数据,并赋值给循环变量
for i in range(1, 11):
print(i, end = ' ')
#输出结果:1 2 3 4 5 6 7 8 9 10
- 匿名循环变量
在使用for循环遍历的时候,也可以使用匿名循环变量"_"
一般使用匿名循环变量的时候,都是在不需要使用遍历得到的数据的情况下,即"_"仅仅就是为了保证for循环语法正确,可以遍历相应次数而存在的
for _ in range(1, 11):
print(1, end = ' ')
#输出结果:1 1 1 1 1 1 1 1 1 1
当然,也可以使用匿名循环变量"_"得到数据
for _ in range(1, 11):
print(_, end = ' ')
#输出结果:1 2 3 4 5 6 7 8 9 10
- for循环语句的特点
for循环语句是按照元素的下标进行取数,并不会因为在循环过程中添加元素或者删除元素而所影响,同时由于对列表进行增删元素之后,其他元素会进行移动(即其他元素的下标会发生变化)
所以如果一边遍历,一边原地移除元素,可能会导致一些意料之外的事情
data = [1,1,1,2,1,2,1,1]
for num in data:
if num ==1:
data.remove(num)
print(data)
#输出结果:
"""
[1, 1, 2, 1, 2, 1, 1]
[1, 2, 1, 2, 1, 1]
[2, 1, 2, 1, 1]
[2, 2, 1, 1]
"""
运行结果分析:
-
第一次执行remove方法:对于[1,1,1,2,1,2,1,1],检测下标为0的元素,元素值为1,符合条件,调用remove函数删除第一个元素
-
第二次执行remove方法:对于[1,1,2,1,2,1,1],检测下标为1的元素,元素值为1,符合条件,调用remove函数删除第一个元素
-
第三次执行remove方法:对于[1,2,1,2,1,1],检测下标为2的元素,元素为1,符合条件,调用remove函数删除第一个元素
-
第四次执行remove方法:对于[2,1,2,1,1],检测下标为3的元素,元素值为1,符合条件,调用remove函数删除第一个元素
-
对于[2,2,1,1],没有下标为4的元素,于是结束循环
-
for循环的解包功能
data = [(1, 2), (3, 4)]
for data1, data2 in data:
print(data1, data2)
#输出结果:
"""
1 2
3 4
"""
break 和continue
break语句用于直接中断整个循环的执行,continue语句用于提前结束本次循环
关键字break 和continue只能用于循环结构中,不能在循环结构之外使用
for循环
for i in range(1, 11):
if i == 5:
continue
if i == 7:
break
print(i, end = ' ')
#输出结果:1 2 3 4 6
while循环
n = 0
while n<10:
n+=1
if n == 5:
continue
if n == 7:
break
print(n, end = ' ')
#输出结果:1 2 3 4 6
else语句与循环结构
如果与else语句处于并列位置(即缩进相同)的整个循环过程中没有执行break(内层循环执行break不考虑),则在循环结束以后,else语句会执行,反之,不执行else语句。简单来说,就是如果循环正常结束,才会执行else语句
即使在循环过程中通过continue加快了循环结束的速度,如果是因为正常因为for遍历完毕/while条件不满足而结束,依旧执行else语句
for循环正常结束
for _ in range(1, 11):
pass
else:
print("循环正常结束")
#输出结果:循环正常结束
while循环正常结束
n = 0
while n<10:
n+=1
else:
print("循环正常结束")
#输出结果:循环正常结束
for循环中途结束
for i in range(1, 11):
if i == 5:
break
else:
print("循环正常结束")
#代码效果:无任何输出
while循环中途结束
n = 0
while n<10:
n+=1
if n == 5:
break
else:
print("循环正常结束")
#代码效果:无任何输出
关于作用域问题
Python 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其 它的代码块(如 if/elif/else/、try/except、for/while等)是不会引入新的作用域的,也就是说这些语句内定义的变量,外部也可以访问
for i in range(5):
print("当前位于%d次循环" % (i+1))
print("当前已经跳出循环", i)
#输出结果:
"""
当前位于1次循环
当前位于2次循环
当前位于3次循环
当前位于4次循环
当前位于5次循环
当前已经跳出循环 4
"""