循环语法
循环结构
循环结构是使用while
、for
循环语句的结构,可以减少冗余代码,提升代码的效率。
while 循环
while
循环,while
循环的使用if
的基本相同,在while
之后使用表达式,如果表达式为真,就会反复执行while
循环代码块的作用域,每执行完一次就重新判断while
的表达式,真就重复上述步骤,直到表达式为假才会跳出;如果一开始就是假,直接跳过。
while expression:
code0
code1
...
# 输出1 ~~ 100 的数字,并计算出它们的和
num = 1 # 数字
sum_up = 0 # 计算和
count = 100 # 循环的次数
while count: # 判断count的值,如果为0就跳出循环
print(num) # 输出数字
sum_up += num # 计算他们的和
num += 1 # 数字自增
count -= 1 # 次数自减
print('和:', sum_up) # 循环结束,输出他们的和
死循环
只要while循环的条件表达式一直为真,相应的作用域就会一直执行,无法跳出,形成死循环。死循环时循环无法跳出,循环语句之后的代码也不会执行。
while True :
print('死循环')
print('跳出循环') # 永远无法跳出循环
关键字的使用
我们来讲三个很重要的关键字:pass
、break
、continue
pass
意思是过、占位符。本身是个空语句,没有任何含义,不会做任何的事情,只是为了保持程序结构的完整性二占据一些必要的位置。
要注意区分None
和pass
的区别,None
的意思是什么都没有,但是也一层布尔为假的含义;而pass
是一点意义都没有,只是为了占据一些位置放置出错而已,更多的情况是用来程序的开发中使用,正式上线是很难看到这个关键字的。
# 代码块中必须有作用域,否则出错,但是我现在不想执行任何东西,怎么办?
if True:
pass # 使用pass占位
while True:
pass # 使用pass占位
break
只能用于循环语句当中,比如while
、for
,只要出现这个关键字,循环立即中断,并跳出循环,循环作用域中未执行的代码也不会执行,即使是循环语句的条件表达式尚未为假,也会立刻停止执行。
count = 10
while count:
count -= 1
if count == 6:
break
print(count)
'''
结果:
9
8
7
'''
continue
只能用于循环语句当中,注意和break
的区别,continue
是跳过当前的循环语句,然后继续循环的执行。
count = 10
while count:
count -= 1
if count == 6:
continue
print(count)
'''
结果:
9
8
7
5
4
3
2
1
0
'''
for循环语句
作用
循环、遍历、迭代。for循环的主要作用是可以遍历迭代可迭代对象。将遍历可迭代对象中的数据元素此一个一个依次提取出来,然后执行代码块中的代码,直到遍历结束。
遍历类型
可迭代对象:容器类型数据、range()函数、迭代器。
# for …… in 中间的变量是可迭代对象中的元素数据。
for 变量 in 可迭代对象:
code2
code1
...
# 将一个容器中的数据遍历出来,所有的容器都是可迭代对象
container = 'hello motherland'
for i in container:
print(i)
遍历字典只会遍历出字典的键
dctvar = {'one': 1, 'two': 2, 'three': 3}
for i in dctvar:
print(i)
'''
结果;
one
two
three
'''
遍历多级容器,我们就需要嵌套使用for循环
var = [[1, 2, 3, 4, 5], [12, 34, 56, 67, 84, 55]]
for i in var:
for j in i:
print(j)
变量的解包
对于容器,我们可以直接使用同等长度数量的变量直接将容器中的数据提取出来。
# 所有容器都支持
a, b, c, d, e = 'hello'
print(a, b, c, d, e)
a, b = ['hello', 'motherland']
print(a, b)
a, b = {'one': 1, 'two': 2} # 解包字典获取的是字典的键
print(a, b)
'''
结果:
h e l l o
hello motherland
one two
'''
所以遍历等长的多级容器的时候就可以利用变量的解包这一特性,快速遍历容器,尽量的避免循环的嵌套使用,因为循环嵌套是十分消耗计算机资源的。
var = [[1, 2, 3, 4, 5], [12, 56, 67, 84, 55]]
for a, b, c, d, e in var:
print(a, b, c, d, e)
'''
结果:
1 2 3 4 5
12 56 67 84 55
'''
range()对象
range函数是一个可迭代对象,可以按照顺序返回一些数字,可以配合for将一些复杂的工作简化。
语法:
range([start_number], stop_number, step_number)
range([开始值], 结束值, [步长])
range的三个参数都是整型数字,range有三种使用方法
-
输入一个参数,这个参数表示结束值,返回的结果是
0 ~~ N-1
for i in range(5): print(i) ''' 结果; 0 1 2 3 4 '''
-
输入两个参数,第一个参数S是开始值,第二个参数N是结束值,返回
S ~~ N-1
。for i in range(-3, 2): print(i) ''' 结果: -3 -2 -1 0 1 '''
-
输入三个参数,第三个参数表示步长,意思是数值的增长按照步长的大小来依次返回。
# 从2开始,数字按照3来增长,默认是1 for i in range(2, 10, 3): print(i) ''' 结果: 2 5 8 '''
倒数
for i in range(5, 0, -1): print(i) ''' 结果: 5 4 3 2 1 '''
总结
while
循环一般使用再较为浮躁的逻辑当中;for
循环一般就是用于数据的遍历。但是它们两个之间的本质是相同的。