循环结构
在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体。当反复执行这个循环时,可以在合适的时候把循环条件改为假(False),从而结束循环。否则,程序一直执行就成了死循环。
1. while循环
1.1 while的一般语句形式
while 判断条件:
语句
#语法格式
[init_statements]
while test_expression :
body_statements
[iteration_statements]
代码测试样例:
In [1]: #循环的初始条件
In [2]: count = 0
In [3]: #当count小于100时,执行循环体
In [4]: while count < 100 :
...: print ('count: ', count)
...: #迭代语句
...: count += 1
...: print ("循环结束.")
count: 0
count: 1
.......(略)
count: 98
count: 99
循环结束.
温馨提示:使用循环时,一定要考虑条件为假的时候,否则循环将是死循环。
1.2 while 循环使用 else 语句
在 while … else 在条件语句为 false 时执行 else 的语句块:
代码测试样例:
In [9]: score = 0 #定义得分初始值为0
In [10]: while score < 60 : #条件判断分数小于60分,为不及格
...: print ('您的分数为: ', score)
...: score += 10
...: else :
...: print ('您合格了。')
...:
您的分数为: 0
您的分数为: 10
您的分数为: 20
您的分数为: 30
您的分数为: 40
您的分数为: 50
您合格了。
1.3 while 循环语句遍历列表和元组
列表和元组的元素都是有索引的,因此程序可通过while循环、列表或元组的索引来实现遍历列表和元组的所有元素。
代码测试样例:
In [11]: t_tuple = ('小明', '小红', '小丽', '苍穹') #定义一个元组
In [12]: i = 0
In [13]: #只有i小于len(t_tuple),继续执行循环体
In [14]: while i < len(t_tuple) :
...: print (t_tuple[i]) #根据i来访问元组的元素
...: i += 1
...:
小明
小红
小丽
苍穹
列表的样例:
In [16]: l_list = [12, 14, 15, 19, 30, 32, 46, 109, 230] #定义列表
In [17]: l1 = [] #定义保存整除3的元素
In [18]: l2 = [] #定义保存除以3余1的元素
In [19]: l3 = [] #定义保存除以3余2的元素
In [20]: #只要l_list还有元素就继续执行循环体
In [21]: while len(l_list) > 0 :
...: #弹出l_list的最后一个元素
...: ele = l_list.pop()
...: #如果ele%3不等于0
...: if ele % 3 == 0 :
...: l1.append(ele) #添加元素到了l1中
...: elif ele % 3 == 1:
...: l2.append(ele) #添加元素到l2中
...: else :
...: l3.append(ele) #添加元素到l3中
...: print ("整除3:", l1)
整除3: [30, 15, 12]
In [22]: print ("除以3余1的:", l2)
除以3余1的: [109, 46, 19]
In [23]: print ("除以3余2的:", l3)
除以3余2的: [230, 32, 14]
1.4 简单语句组
类似if语句的语法,如果你的while循环体中只有一条语句,你可以将该语句与while写在同一行中, 如下所示:
In [27]: flag1 = True
In [28]: while(flag1): print ("你看到我了,证明flag1是真,我要进入死循环")
你看到我了,证明flag1是真,我要进入死循环
你看到我了,证明flag1是真,我要进入死循环
.......
ctrl+c中断死循环
2. for语句
for循环可以遍历任何序列的项目,如一个列表或者一个字符串。
for-in 循环专门用于遍历范围、列表、元素和字典等可迭代对象包含的元素,
for循环的一般格式如下:
for variable in sequence:
statements
else:
statements
for-in循环语法格式:
for variable in string/range/集合等:
statements
代码测试样例:
In [31]: def testForIn():
...: s=input("请输入一个数字,我返还给你他的阶乘!,请输入:")
...: i= int(s) #转换成整型
...: result = 1
...: #使用for-in循环遍历范围
...: for num in range(1, i+1):
...: result *= num
...: print (result)
...:
In [32]: testForIn()
请输入一个数字,我返还给你他的阶乘!,请输入:4
24
2.1 使用for-in循环遍历列表和元组
列表和元组有几个元素,for-in循环的循环体就执行几次,针对每个元素执行一次,循环计数器会依次被赋值为元素的值。
代码测试样例:
In [33]: l = ['haohaia', 'balabala', 'go home'] #定义列表
In [34]: for i in l:
...: print (i)
...:
haohaia
balabala
go home
In [1]: t1_tuple = (1, 1.0, 2.0, 5, 'crazy', 'hello', 10, 20, 'wow') #定义元组
In [2]: i_count = 0 #定义浮点数,整数的计数器
In [3]: s_count = 0 #定义字符串的计数器
In [4]: for i in t1_tuple:
...: if isinstance(i, int) or isinstance(i, float):
...: print (i)
...: i_count += 1
...: else :
...: print (i)
...: s_count += 1
...:
1
1.0
2.0
5
crazy
hello
10
20
wow
In [5]: print (i_count)
6
In [6]: print (s_count)
3
2.2 使用for-in循环遍历字典
使用for-in循环遍历字典其实也是通过遍历普通列表来实现的,字典包含三个方法:
items() : 返回字典中所有key-value对的列表
keys() :返回字典中所有的key的列表
values() :返回字典中所有value的列表
所以遍历字典,就可以完全用上面的方法进行遍历
In [10]: for key, value in my_dict.items():
...: print ('key:', key)
...: print ('value:', value)
...:
key: 语文
value: 98
key: 数学
value: 10
key: 英语
value: 60
In [12]: for key in my_dict.keys():
...: print ('key:', key)
...:
key: 语文
key: 数学
key: 英语
In [13]: for value in my_dict.values():
...: print ('value:', value)
...:
value: 98
value: 10
value: 60
3 循环嵌套
把一个循环放到另一个循环里,就形成了循环嵌套。
代码测试样例:
In [16]: for i in range(0, 5):
...: j = 0
...: #内层循环嵌套
...: while j < 3:
...: print ('i的值为: %d, j的值为%d' %(i, j))
...: j += 1
...:
i的值为: 0, j的值为0
i的值为: 0, j的值为1
i的值为: 0, j的值为2
i的值为: 1, j的值为0
i的值为: 1, j的值为1
i的值为: 1, j的值为2
i的值为: 2, j的值为0
i的值为: 2, j的值为1
i的值为: 2, j的值为2
i的值为: 3, j的值为0
i的值为: 3, j的值为1
i的值为: 3, j的值为2
i的值为: 4, j的值为0
i的值为: 4, j的值为1
i的值为: 4, j的值为2
4 for的表达式
for表达式的语法格式
[表达式 for 循环计数器 in 可迭代对象]
In [20]: n_range = range(10)
In [21]: n_list = [x * x for x in n_range]
In [22]: print (n_list)
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]