zoukankan      html  css  js  c++  java
  • 循环

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

    #我们已经知道条件为真(或假)时程序如何执行了,若想让程序重复执行,该怎么操作呢?比如输出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

  • 相关阅读:
    shell 脚本实现yum安装 LAMP 架构的 wordpress
    redis主从及哨兵和cluster集群
    扫描网段中服务器显示状态
    利用for循环输出九九乘法表
    正则表达式取文件后缀
    利用正则表达式实现yes/no判断
    判断输入的IP地址是否合法
    Shell脚本编程基础之shell脚本条件测试命令
    Shell脚本编程基础之shell脚本逻辑运算
    Shell脚本编程基础之shell脚本算术运算
  • 原文地址:https://www.cnblogs.com/DLHe/p/7751136.html
Copyright © 2011-2022 走看看