流程控制
if判断
判断是为了让计算机能够具备人的判断能力,判断的结果就是成立与不成立。判断成立则执行分支内代码,不成立则继续向下判断或结束。
单分支
if 条件:
代码1
代码2
。。。
双分支
if 条件:
代码1
代码2
。。。
else:
代码1
代码2
。。。
多分支
if 条件1:
代码1
代码2
。。。
elif 条件2:
代码1
代码2
。。。
elif 条件3:
代码1
代码2
。。。
else:
代码1
代码2
。。。
任何一个条件判断成功就不会再判断其他项,如果都判断不成功则执行else。
while循环
循环就是重复做某件事。while循环也被称为条件循环,条件成立则执行循环体代码,不成立则循环结束。
while 条件:
代码1
代码2
。。。
while循环也可以使用else,表示循环正常结束(也就是条件判断为假)后才会执行。如果是被break终止,else则不会执行。
while 条件:
代码1
代码2
。。。
else:
代码1
代码2
。。。
结束循环的两种方式:
方式一:改变条件为假。
# 打印12345,当count为6时条件不成立,循环结束。
count = 0
while count < 5:
count += 1
print(count)
方式二:break结束本层循环。break之后一定不要写代码。
# count等于3后立即结束本层循环。
count = 0
while count < 5:
count += 1
if count == 3:
print(count)
break
区别是:break会立即终止本层循环,而方式一需要等到下一次循环判断条件时才会生效。
continue终止本次循环
循环执行到continue时会终止本次循环,重新判断循环条件。continue之后一定不要写代码。
# 遇到3则终止本次循环,进入下一次循环判断.
count = 0
while count < 5:
count += 1
if count != 3:
print(count)
else:
continue
# 1245
死循环
死循环是指条件永远为真的循环。IO等待型的死循环并无害,但若是计算密集型的死循环会消耗大量的CPU资源,应该避免。
while 1:
1 + 1
# 该循环条件永远为真,哪怕仅仅计算1 + 1也会在启动后消耗大量的CPU资源.
流程控制语句之间彼此是可以互相嵌套的。
# 遇到3则终止本次循环,进入下一次循环判断.
count = 0
while count < 5:
count += 1
if count != 3:
print(count)
else:
continue
# 1245
for循环
Foreach循环(Foreach loop)用来遍历一个可迭代对象,也被称为有限循环。for循环会遍历对象的每一个值,将每个值赋值给前面的变量,然后执行循环体代码,对象内容遍历完则循环结束。在遍历一个序列时不要修改序列内值。
结构
for var in object:
代码1
代码2
。。。
for循环也可与else结合使用,当循环正常结束(遍历完对象每个值),即会执行else代码。若循环体被break终止则else不会执行。
for var in object:
代码1
代码2
。。。
else:
代码1
代码2
。。。
for i in range(3):
print(i)
else:
print("aaa")
# 0 1 2 aaa
for循环同样支持break与continue关键字。
循环嵌套
循环内再嵌套循环,实际生产环境中,最多嵌套2层。再嵌套时间复杂度会过大。n层循环的时间复杂度为n次方。1层循环的时间复杂度为O(n),2层循环时间复杂度为O(n^2)。
for i in range(10):
for j in range(10):
print(j)
# 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 ...重复10遍
内置函数len()
返回对象的长度(元素个数)。实参可以是序列(如 string、bytes、tuple、list 或 range 等)或集合(如 dictionary、set 或 frozen set 等)。
print(len(range(10)))
# 10
range
()类型
range(start,stop[,step])类型表示不可变的数字序列,通常用于在 for
循环中循环指定的次数。range构造器的参数必须为整数。
python2中range会造出列表,如果数量过多会占用大量内存。
Python3中range类型对象总是占用固定数量的(较小)内存,不论其所表示的范围有多大(因为它只保存了 start
, stop
和 step
值,并会根据需要计算具体单项或子范围的值)。
- range(stop),start默认为0,step默认为1。
r = range(10)
print(r)
# 会显示 range(0,10)
- range(start,stop)
for i in range(1,101):
print(i)
# 显示1,2,3,4,5,6,7,8,9...100
# 默认从0开始,顾首不顾尾
- range(start,stop[,step])
# 打印0-100所有偶数
for i in range(2,101,2):
print(i)
# 打印100-0,-1
for i in range(100,-1,-1):
print(i)
- 使用range() 和len()组合,可以以序列的索引来迭代。
li = ['a', 'b', 'c', 'd']
for i in range(len(li)):
print(i,l[i])
0 a
1 b
2 c
3 d
enumerate
()类型
enumerate(iterable, start=0)返回一个枚举对象。iterable 必须是一个序列,或 iterator,或其他支持迭代的对象。 enumerate()
返回的迭代器的 __next__()
方法返回一个元组,里面包含一个计数值(从 start 开始,默认为 0)和通过迭代 iterable 获得的值。
li = [111,222,333,444,555]
for n,i in enumerate(li):
print(n,i)
0 111
1 222
2 333
3 444
4 555
pass关键字
占位符,在Python3中可以用三个点 . . .
代替。
pass
语句什么也不做。当语法上需要一个语句,但程序需要什么动作也不做时,可以使用它。
pass
的另一个可以使用的场合是在你编写新的代码时作为一个函数或条件子句体的占位符,允许你保持在更抽象的层次上进行思考。
# 什么都不执行,保证代码结构正确。
if 10 > 1:
...
if 10 > 1:
pass