循环

   #程序在一般情况下是按顺序执行的。编程语言提供了各种控制结构,允许更复杂的执行路径。循环语句允许我们多次执行一个语句或语句组。下图为大多数编程语言中循环语句的执行流程。

#我们已经知道条件为真(或假)时程序如何执行了,若想让程序重复执行,该怎么操作呢?比如输出1-100所有数字,是写100个输出语句吗?

1、while循环

 1 #我们先看如何使用简单的程序输出1-10所有数字,示例如下:
 2 #! /usr/bin/python3
 3 # -*- coding:UTF-8 -*-
 4 #while语句
 5 
 6 n=1
 7 while n<=10:
 8      print('当前数字是:',n)
 9      n+=1
10         #由输出程序看到,只需短短几行即可实现这个功能,我们看看输出结果。
11 =================== RESTART: D:Pythonworkspacewhile.py ===================
12 当前数字是: 1
13 当前数字是: 2
14 当前数字是: 3
15 当前数字是: 4
16 当前数字是: 5
17 当前数字是: 6
18 当前数字是: 7
19 当前数字是: 8
20 当前数字是: 9
21 当前数字是: 10
22         #由输出结果看到,按顺序输出了对应结果。
23         #该示例中使用了while关键字。在Python编程中,while语句用于循环执行程序,以处理需要重复处理的任务。基本语法形式为:
24 while  判断条件:
25     执行语句....
26         #执行语句可以是单个语句或语句块。判断条件可以是任何表达式,所有非零、非空(null)的值都为真(true)。当判断条件为假(false)时,循环结束。
27         #while循环的执行流程如图所示。

#该流程图的意思为:首先对while语句条件判定,当条件为true时,执行条件语句块,执行完语句块在判定while条件,若条件为true,则继续执行语句块,直到条件为false时结束循环。

2、for循环

 1   #上面我们了解了while循环,可以看到while语句非常灵活。例如以下代码:
 2 #! /usr/bin/python3
 3 # -*- coding:UTF-8 -*-
 4 #for语句
 5 
 6 n=0
 7 fields=['a','b','c']
 8 while n<len(fields):
 9      print('当前字母是:',fields[n])
10      n+=1
11         #该代码实现的功能是将列表中的元素分别输出。该程序的实现没什么问题,我们是否由更好的方式实现这个功能呢?例如:
12 #! /usr/bin/python3
13 # -*- coding:UTF-8 -*-
14 #for语句
15 
16 n=0
17 fields=['a','b','c']
18 for f in fields:
19      print('当前字母是:',f)
20         #可以看到,代码比前面使用while循环时更简洁,代码量也更少。程序执行输出结果如下:
21 ==================== RESTART: D:/Python/workspace/for.py ====================
22 当前字母是: a
23 当前字母是: b
24 当前字母是: c
25         #该示例使用了for关键字。在Pytho中,for关键字叫做for循环,for循环可以遍历任何序列的项目,如一个列表或字符串。
26         #for循环的语法格式如下:
27 for iterating_var in sequence:
28     statements(s)
29         #sequence是任意序列,iterating_var是序列中需要遍历的元素。statements是待执行的语句块
30         #for循环的执行流程如图所示:

 1  #该流程图的意思为:首先对for条件判定,游标指向第0个位置,即指向第一个元素,看sequence序列中是否有元素,若有,则将元素赋值给iterating_var,接着执行语句块,若语句块需要获取元素值,则使用iterating_var的值,执行完语句块后,将序列的游标往后挪一个位置,再判定该位置是否有元素,若仍然有元素,则继续执行语句块,然后序列的游标再往后挪一个位置,直到下一个位置没有元素时结束循环。
 2         #我们再看以下示例:
 3 #! /usr/bin/python3
 4 # -*- coding:UTF-8 -*-
 5 #for语句
 6 
 7 print('----for循环字符串------')
 8 for letter in 'good':   #for循环字符串
 9      print('当前字母为:',letter)
10 
11 print('----for循环数字序列------')
12 number=[1,2,3]
13 for num in number:  #for循环数字序列
14      print('当前数字时:',num)
15 
16 print('----for循环字典-------')
17 tups={'name':'小智','number':'1001'}
18 for tup in tups:   #for循环字典
19      print('%s:%s'%(tup,tups[tup]))
20         #输出结果如下:
21 ==================== RESTART: D:/Python/workspace/for.py ====================
22 ----for循环字符串------
23 当前字母为: g
24 当前字母为: o
25 当前字母为: o
26 当前字母为: d
27 ----for循环数字序列------
28 当前数字时: 1
29 当前数字时: 2
30 当前数字时: 3
31 ----for循环字典-------
32 name:小智
33 number:1001
34         #由上面的输入代码和输出结果看到,for循环的使用还是很方便的。
35         #因此能使用for循环,就尽量不要使用while循环。
3、循环遍历元素

 1   #在前面的示例中,我们已经了解了使用for循环遍历字典的代码,代码如下:
 2 #! /usr/bin/python3
 3 # -*- coding:UTF-8 -*-
 4 #循环遍历字典元素
 5 
 6 tups={'name':'小智','number':'1001'}
 7 for tup in tups:   #for循环字典
 8      print('%s:%s'%(tup,tups[tup]))
 9         #可以看到,此处使用for循环对字典的处理看起来有些繁杂,是否还有别的方法更加直观呢?
10 #! /usr/bin/python3
11 # -*- coding:UTF-8 -*-
12 #循环遍历字典元素
13 
14 tups={'name':'小智','number':'1001'}
15 for key,value in tups.items():
16      print('%s:%s'%(key,value))
17         #还记得我们前面的序列解包吗?for循环的一大好处是可以在循环中使用序列解包。
18         #输出结果如下:
19 ================== RESTART: D:/Python/workspace/循环遍历字典元素.py ==================
20 name:小智
21 number:1001
22         #由输入代码和输出结果看到,可以使用items方法将键/值对作为元组返回。
23         #字典中的元素是没有顺序的。也就是说,迭代时字典中的键和值都能保证被处理,但是处理顺序不确定。这也是用for虚幻输出字典中的元素时不按照顺序输出的原因。
4、迭代工具

 1  #在Python中,迭代序列或其他迭代对象时,有一些函数非常有用。
 2         
 3 ①、并行迭代
 4         #程序可以同时迭代两个序列,示例如下:
 5 #! /usr/bin/python3
 6 #-*- coding:UTF-8 -*-
 7 #迭代工具_并行迭代
 8 
 9 student=['小明','小智','小强']
10 number=[1001,1002,1003]
11 for i in range(len(student)):
12     print(student[i],'学号是:',number[i])
13         #程序执行结果如下:
14 ================= RESTART: D:/Python/workspace/迭代工具_并行迭代.py =================
15 小明 学号是: 1001
16 小智 学号是: 1002
17 小强 学号是: 1003
18         #在程序中,i是循环索引的标准变量名。
19         #在Python中,内建的zip函数用来进行并行迭代,可以把两个序列合并在一起,返回一个元组的列表,例如:
20 #! /usr/bin/python3
21 #-*- coding:UTF-8 -*-
22 #迭代工具_并行迭代_zip函数
23 
24 student=['小明','小智','小强']
25 number=[1001,1002,1003]
26 for name,num in zip(student,number):
27     print(name,'学号是:',num)
28         #程序执行结果和前面一样。
29         #zip函数可以作用于任意数量的序列,并且可以应付不等长的序列,当端序列“用完”时就会停止。
30 #! /usr/bin/python3
31 #-*- coding:UTF-8 -*-
32 #迭代工具_并行迭代_zip_range函数
33 
34 for num1,num2 in zip(range(5),range(100)):
35     print('zip键值对为:',num1,num2)
36         #程序执行结果如下:
37 =========== RESTART: D:/Python/workspace/迭代工具_并行迭代_zip_range函数.py ===========
38 zip键值对为: 0 0
39 zip键值对为: 1 1
40 zip键值对为: 2 2
41 zip键值对为: 3 3
42 zip键值对为: 4 4
43         #由输出结果看到,zip函数以短序列为准,当短序列遍历结束时,for循环就会遍历结束。
44         #此处用到range函数,是Python3中的函数,在Python2版本中存在与这个函数功能类似的xrange函数。
45 
46 ②、翻转和排序迭代
47         #在列表中学习过reverse和sort方法,此处介绍两个类似的函数--reversed和sorted函数。这两个函数可作用于任何序列或可迭代对象,但不是原地修改对象,而是返回翻转或排序后的版本。示例如下:
48 >>> sorted([1,5,2,7,1])
49 [1, 1, 2, 5, 7]
50 >>> sorted('hello,world!')
51 ['!', ',', 'd', 'e', 'h', 'l', 'l', 'l', 'o', 'o', 'r', 'w']
52 >>> list(reversed('hello,world!'))
53 ['!', 'd', 'l', 'r', 'o', 'w', ',', 'o', 'l', 'l', 'e', 'h']
54 >>> ''.join(reversed('hello,world!'))
55 '!dlrow,olleh'
56         ##由输出结果看到,sorted函数返回的是一个列表,reversed函数返回的是一个可迭代的对象。在for循环和join方法中使用不会有任何问题,如果要对这两个函数使用索引、分片及调用list方法,就可以使用list类型转换返回对象。
5、跳出循环

 1 #在前面的示例中讲了,循环会一直执行,直到条件为假或序列元素用完时才会结束。若我们想提前中断循环,比如循环的结果已经是我们想要的了,不想让循环继续执行而占用资源,有什么办法实现呢?
 2         #Python提供了break、continue等语句可用于这种情形。
 3 
 4 ①、break
 5         #break语句用来终止循环语句,即使循环条件中没有false条件或序列还没有遍历完,也会停止执行循环语句。
 6         #break语句用在while和for循环中。
 7         #如果使用嵌套循环,break语句就会停止执行最深层的循环,并开始执行下一行代码。
 8         #break语句语法如下:
 9 break
10         #break语句的执行流程如下图所示:

 1   #当遇到break语句时,无论什么条件,都会跳出这循环,例如:
 2 #! /usr/bin/python3
 3 #-*- coding:UTF-8 -*-
 4 #break语句
 5 
 6 for letter in 'hello':   #示例1
 7     if letter=='l':
 8         break
 9     print('当前字母是:',letter)
10 
11 
12 
13 num=10                 #示例2
14 while num>0:
15     print('输出数字为:',num)
16     num-=1
17     if num==8:
18         break
19         #输出结果如下:
20 =================== RESTART: D:/Python/workspace/break.py ===================
21 当前字母是: h
22 当前字母是: e
23 输出数字为: 10
24 输出数字为: 9
25         #由输出结果看到,在示例1中,输出语句输出循环遍历到的字符,当遇到指定字符时,跳出for循环。在示例2中,使用while做条件判定,在语句块中输出满足条件的数字,当数字等于8时,跳出while循环,不再继续遍历。
26 
27 ②、continue
28         #continue语句用来告诉Python跳过当前循环的剩余语句,然后继续进行下一轮循环。
29         #continue语句用在while和for循环中。
30         #continue语句的语法如下:
31 continue
32         #continue语句的执行流程如图所示:

 1  #当执行过程中遇到continue语句时,无论执行条件是真还是假,都跳过这次循环,进去下一次循环,例如:
 2 #! /usr/bin/python3
 3 #-*- coding:UTF-8 -*-
 4 #continue语句
 5 
 6 for letter in 'hello':   #示例1
 7     if letter=='l':
 8      continue
 9     print('当前字母是:',letter)
10 
11 
12 
13 num=3                    #示例2
14 while num>0:
15     num-=1
16     if num==2:
17         continue
18     print('当前数字为:',num)
19         #输出结果如下:
20 ================== RESTART: D:/Python/workspace/continue.py ==================
21 当前字母是: h
22 当前字母是: e
23 当前字母是: o
24 当前数字为: 1
25 当前数字为: 0
26         #由输出结果看到,相比于break语句,使用continue语句只是跳过一个循环,不会跳出整个循环。
6、循环中的else子句

 1  #在开发的过程中,可能需要在while、for循环不满足条件时做一些工作,例如:
 2 
 3 ①、在while循环中使用else语句
 4         #在while条件语句为false时,执行else的语句块。
 5 #! /usr/bin/python3
 6 #-*- conding:UTF-8 -*-
 7 #在while循环中的else子句
 8 
 9 num=0
10 while num<3:
11     print(num,"小于3")
12     num=num+1
13 else:
14     print(num,'大于或等于3')
15 print('循环结束!')
16         #执行结果如下:
17 ================= RESTART: D:/Python/workspace/循环中的else子句.py =================
18 0 小于3
19 1 小于3
20 2 小于3
21 3 大于或等于3
22 循环结束!
23         #由输出结果看到,while循环结束后执行了else语句中的语句块,输出“3 大于或等于3”语句。
24 
25 ②、在for循环中使用else语句
26         #在for语句为false或结束后没有被break中断时,执行else的语句块,例如:
27 #! /usr/bin/python3
28 #-*- conding:UTF-8 -*-
29 #在for循环中的else子句
30 
31 names=['xiaoming','xiaozhi']
32 for name in names:
33     if name=='xiao':
34         print('名称:',name)
35         break
36     print('循环名称列表',name)
37 else:
38     print('没有循环数据!')
39 print('循环结束!')
40         #执行结果如下:
41 =============== RESTART: D:/Python/workspace/在for循环中的else子句.py ===============
42 循环名称列表 xiaoming
43 循环名称列表 xiaozhi
44 没有循环数据!
45 循环结束!
46         #由输出结果看到,for循环结束后执行了else语句块中的内容。

end

原文地址:https://www.cnblogs.com/DLHe/p/7751136.html