原文链接: http://www.juzicode.com/python-tutorial-loop/
在《流程控制-条件语句》中介绍了条件语句,这篇文章介绍Python的另一种流程控制语句:循环语句。循环语句用来解决具有规律性的重复操作,在满足循环条件时会继续回到循环语句的入口再一次执行循环语句块。循环语句包含了循环条件和循环体2大要素,在Python语句中循环语句一般是这个样子的:
1 循环条件
1.1 while语句
Python中最常用的循环条件语句有2种,一种是while语句,一种是for语句。while语句后面跟随的是一个条件句,可以使用bool类型的True:while True;
while True:
循环体
a = 0
while True:
a = a + 1
print('a:',a)
print('循环结束.')
结果 | 流程控制实验: 循环条件 a: 1 a: 2 a: 3 a: 4 a: 5 …….. |
或者某个数值的比较:while a<5;
while a<5: 循环体
a = 0 while a<5: a = a + 1 print('a:',a) print('循环结束.')
结果 | a: 1 a: 2 a: 3 a: 4 a: 5 循环结束. |
1.2 for...in...语句
for语句的结构稍微复杂些:“for 本轮提取元素 in 可迭代对象”,其中可迭代对象可以是str,list,tuple,set,dict,使用str时每次提取的是单个字符,使用list,tuple和set是每次提取的是单个元素,使用dict时每次提取的是key。
for tp in tuple: 循环体
使用tuple作为循环控制的例子:
tuple = (1,2,3,4,5) for tp in tuple: print('tp:',tp) print('循环结束.')
结果 | tp: 1 tp: 2 tp: 3 tp: 4 tp: 5 循环结束. |
使用dict作为循环控制的例子:
dict = {1:'www',2:'juzi',3:'code',4:'com',5:'桔子code'} for d in dict: print('d:',d) print('循环结束.')
结果 | d: 1 d: 2 d: 3 d: 4 d: 5 循环结束. |
for语句中还有一种常用的可迭代类型:range,可以使用range()构造一个range类型的数据,这种数据类型一般只用在循环语句中,所以在前面介绍数据类型的时候没有涉及。rang()函数可以带1到3个参数,如果只有1个参数n,表示一个步长为1,从0到n-1的range数据,如果是2个参数n,m,表示一个步长为1,从n到m-1的range数据;如果是带3个参数n,m,s,表示一个步长为s,从n到m-1的range数据。
print('类型:',type(range(5))) print('%s'%range(5)) for r in range(5): print('r:',r) print('类型:',type(range(5,10))) print('%s'%range(5,10)) for r in range(5,10): print('r:',r) print('类型:',type(range(5,10,2))) print('%s'%range(5,10,2)) for r in range(5,10,2): print('r:',r)
结果 | 类型: <class 'range'> range(0, 5) #步长为1,从0到5-1的range数据 r: 0r: 1r: 2r: 3r: 4 类型: <class 'range'> range(5, 10) #步长为1,从5到10-1的range数据 r: 5r: 6r: 7r: 8r: 9 类型: <class 'range'> range(5, 10, 2) #步长为2,从5到10-1的range数据 r: 5r: 7r: 9 |
2 循环语句的中断
2.1 跳出循环-break
在第一个实验中,我们看到while True里的循环体一直在运行,根本没有停止的意思,因为在这段代码里,循环条件是True,永远都会满足,所以每轮循环体都能得到执行。如果想在某个条件满足的时候退出循环,可以使用break语句终止本次循环。比如还是在这个实验中,希望a=5的时候跳出循环,可以这么做:
a = 0 while True: a = a + 1 print('a:',a) if a == 5: break print('循环结束.')
结果 | a: 1 a: 2 a: 3 a: 4 a: 5 循环结束. |
在dict作为for循环条件的实验中,假设找到了’juzi’字符串就退出循环:
dict = {1:'www',2:'juzi',3:'code',4:'com',5:'桔子code'} for d in dict: print('d:',d) if dict[d] == 'juzi': break print('循环结束.')
结果 | d: 1 d: 2 循环结束. #对比前面没有用中断语句,后面还打印了3,4,5。 |
2.2 跳过本轮循环-continue
在循环体中有多行语句,有时可能希望当某个条件满足的时候,后半部分的语句块不需要执行,而是回到循环条件重新下一轮循环,这时候就可以使用continue语句。比如要统计dict = {1:'www',2:'juzi',3:'code',4:'com',5:'juzi',6:'桔子'}中'juzi'出现的次数:
count = 0 dict = {1:'www',2:'juzi',3:'code',4:'com',5:'juzi',6:'桔子'} for d in dict: print('dict[%s]:'%d,dict[d]) if dict[d] != 'juzi': # 如果获取的value不是'juzi', continue # 后面计数+1就不执行,continue跳过了本次循环 count += 1 print('循环结束. juzi出现了%d次'%count)
结果 | dict[1]: www dict[2]: juzi dict[3]: code dict[4]: com dict[5]: juzi dict[6]: 桔子循环结束. juzi出现了2次 |
示例代码: https://github.com/juzicode00/py3study/tree/master/05b-loop