10

Python循环语句代码详解:while、for、break

 3 years ago
source link: http://developer.51cto.com/art/202012/634489.htm
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

.1 while循环

循环语句是程序设计中常用的语句之一。任何编程语言都有while循环,Python也不例外。while循环的格式如下所示。

 while(表达式): 
     … 
 else: 
     … 

while循环的执行过程:当循环表达式为真时,依次执行while中的语句。直到循环表达式的值为False,程序的流程转到else语句。其中else子句可以省略,表达式两侧的括号也可以省略。

Q7JrInQ.jpg!mobile

注意:while循环中的else子句也属于循环的一部分,最后一次循环结束后将执行else子句。

下面这段代码演示了while循环的使用。程序首先要求输入5个数字,然后依次输出这5个数字。

 # while循环 
 numbers = input("输入几个数字,用逗号分隔:").split(",") 
 print(numbers) 
 x = 0 
 while x < len(numbers):    # 当x的值小于输入字数的个数的时候,执行循环内容     
     print (numbers[x]) 
     x += 1                  # 一个循环结束时给x加1 

【代码说明】

  • 第2行代码使用input()捕获输入。按照提示输入5个数字,并用逗号分隔。input()根据输入的逗号,生成一个列表。
  • 第3行代码输出列表numbers的内容。
  • 第4行代码定义变量x的值为0。
  • 第5行代码循环列表numbers。
  • 第6行代码输出列表中第x+1个数字的值。
  • 第7行代码,每次循环使变量x增1。

下面【例3-6】中的这段代码演示了else子句在while循环中的使用。当变量x的值大于0时,执行循环,否则输出变量x的值。

【例3-6.py】

 # 带else子句的while循环 
 x = float(input("输入x的值:"))   # 接收用户输入的数字并转换为float类型 
 i = 0 
 while(x  != 0):                  # Python 3中的不等于不再使用<>,一律使用!= 
     if(x > 0): 
         x -= 1                  # 如果x大于0,则减1 
     else: 
         x += 1                 # 如果x小于0,则加1 
     ii = i + 1 
     print( "第%d次循环:%f" %(i, x)) 
 else: 
     print ("x等于0:", x) 

【代码说明】

  • 第2行代码输入变量x的值。
  • 第3行代码定义变量i,变量i表示循环次数。
  • 第4行代码,给出循环条件x != 0。如果x不等于0,则执行第5行代码;否则,执行else子句的内容。
  • 第5行代码,判断变量x的值是否大于0。
  • 第6行代码,如果x的值大于0,则每次循环都减1。
  • 第7行代码,判断变量x的值是否小于0。
  • 第8行代码,如果x的值小于0,则每次循环都加1。
  • 第9行代码,每次循环使变量i的值加1。
  • 第11行代码,循环结束,else子句输出变量x的值。输出结果(假设输入数字为0):x等于0:0。

在使用循环语句时,应注意循环表达式的布尔值,避免出现死循环。死循环是指循环条件永远为真的循环。例如:

 i = 1 
 while i > 0:     # i永远大于0 
     ii = i + 1 
     print(i) 

这段代码就是一个死循环,变量i的值永远都大于0。

2. for循环

for循环用于遍历一个集合,依次访问集合中的每个项目。for循环的格式如下所示。

 for 变量 in 集合: 
     … 
 else: 
     … 

for…in…循环的执行过程:每次循环从集合中取出一个值,并把该值赋值给变量。集合可以是元组、列表、字典等数据结构。其中else子句可以省略。

注意:for循环中的else子句也属于循环的一部分,最后一次循环结束后将执行else子句。

for…in…循环通常与range()函数一起使用,range()返回一个列表,for…in…遍历列表中的元素。range()函数的声明如下:

class range(object) 
   range(stop) -> range object 
range(start, stop[, step]) -> range object 

【代码说明】

range()返回一个range对象,列表的元素值由3个参数决定:参数start表示列表开始的值,默认值为0;参数stop表示列表结束的值,该参数不可缺少;参数setp表示步长,即每次递增或递减的值,默认值为1。

下面【例3-7】中的这段代码遍历range()生成的列表,过滤出正数、负数和0。

【例3-7.py】

 # for in语句 
 for x in range(-1, 2): 
     if x > 0:  
         print ("正数:",x) 
     elif x == 0 :  
         print ("零:",x) 
     else: 
         print ("负数:",x) 
 else: 
    print ("循环结束") 

【代码说明】

  • 第2行代码遍历range(-1,2)生成的列表。range(-1,2)返回的3个数字分别为-1、0、1。每次循环结束,变量x的值依次为-1、0、1。
  • 第3行代码判断变量x的值是否大于0。
  • 第4行代码输出正数的值。输出结果为“正数:1”。
  • 第5行代码判断变量x的值是否等于0。
  • 第6行代码,输出结果为“零:0”。
  • 第8行代码,输出负数的值。输出结果为“负数:-1”。
  • 第9行代码并没有结束for循环,else子句执行后循环才结束。输出结果为“负数:-1”。

在C、Java语言中,支持如下结构的for语句。

for(表达式1; 表达式2; 表达式3)  
语句块 

Python不支持这样的for循环。如果需要编写类似功能的循环,可以使用while循环。例如:

 x = 0 
 while x < 5: 
     print(x) 
     xx = x + 2 

while循环的写法比较琐碎,需要比较判断。因此,对此也可以使用for循环,借助range()函数来实现。例如:

 for x in range(0, 5, 2): 
     print (x) 

【代码说明】

输出的数字在[0,5)这个区间,不包括5。每次循环结束,x的值加2。输出结果:

0 
2 
4 

这里只用了两行代码就实现了传统for循环。如果要用条件表达式作为循环的条件,可以构造range()函数来实现。

3. break和continue语句

break语句可以使程序跳出循环语句,从而执行循环体之外的程序,即break语句可以提前结束循环。例如,模拟switch分支结构使用了break语句。

 operator = "+" 
  x = 1 
  y = 2 
  for case in switch(operator):   # switch只能用于for... in...循环中 
      if case('+'): 
          print (x + y) 
          break 
      if case('-'): 
          print (x - y) 
         break 
     if case('*'): 
         print (x * y) 
         break 
     if case('/'): 
         print (x / y) 
         break 
     if case():                      # 默认分支 
         print ("") 

【代码说明】

第7行代码中使用了break。当变量operator的值为“+”,则执行表达式x + y,然后中断switch分支结构,后面的case分支都不会执行。此时输出结果为3。后面的break作用相同。当匹配到某个case后,程序将跳出switch。

如果第一个case不使用break子句,程序将输出两个值,分别是3和-1。因为执行完输出表达式x + y后,分支结构并没有中断,程序将流转到下面一个case。然后继续计算表达式x – y的值,遇到后面的break语句才退出分支结构。break语句在循环结构中也有类似的作用。【例3-8】中的这段代码将从0到99中查找用户输入的值。

【例3-8.py】

 x = int(input("输入x的值:")) 
 y = 0 
 for y in range(0, 100): 
     if x == y: 
         print ("找到数字:", x) 
         break 
 else: 
     print("没有找到") 

【代码说明】

  • 第1行代码捕获用户输入的值,并把该值转换为int类型,赋值给变量x。
  • 第2行代码定义一个变量y,变量y用于暂存需要遍历的列表的值。
  • 第3行代码使用for…in…循环遍历range(0, 100)返回的列表。range(0, 100)的返回值为0、1、2、…、99。
  • 第4行代码判断输入的值是否等于列表中的值。如果条件成立,输出查找到的数字,并立即退出循环。循环结束,后面的else子句将不会被执行。
  • 第7行代码,当没有找到输入的值时,else子句后面的代码将被执行。

注意:break语句不能运行在循环体或分支语句之外,否则,Python解释器将提示如下错误。

SyntaxError: 'break' outside loop 

continue语句也是用来跳出循环的语句,但是与break不同的是,使用continue语句不会跳出整个循环体,只是跳出当前的循环,然后继续执行后面的循环。

 x = 0 
 for i in [1,2,3,4,5]: 
     if x == i: 
     continue 
 x  += i 
 print("x的值为", x)     

【代码说明】

  • 第1行代码将x赋值为0。
  • 第2行代码使用for...in...语句遍历列表[1,2,3,4,5]。
  • 第3行代码将x与i进行比较,如果x与值i相等,则执行第4行的continue语句,停止当前循环,即不再执行第5行代码,继续执行下一个循环。
  • 第6行代码打印出最终的结果,输出为12。

【责任编辑:赵宁宁 TEL:(010)68476606】


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK