加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

详解Python中的循环语句的用法

发布时间:2020-05-24 08:54:07 所属栏目:Python 来源:互联网
导读:一、简介Python的条件和循环语句,决定了程序的控制流程,体现结构的多样性。须重要理解,if、while、for以及与它们相搭配的else、elif、break、continue和pass语句。

一、简介

      Python的条件和循环语句,决定了程序的控制流程,体现结构的多样性。须重要理解,if、while、for以及与它们相搭配的 else、 elif、break、continue和pass语句。
二、详解
1、if语句

        Python中的if子句由三部分组成:关键字本身、用于判断结果真假的条件表达式以及当表达式为真或者非零时执行的代码块。if 语句的语法如下:

if expression:
 expr_true_suite

        if 语句的expr_true_suite代码块只有在条件表达式的结果的布尔值为真时才执行,否则将继续执行紧跟在该代码块后面的语句。
(1)多重条件表达式
        单个if语句可以通过使用布尔操作符and、or和not,实现多重判断条件或是否定判断条件。
(2)单一语句的代码块
        如果一个复合语句(例如if子句、while或for循环)的代码块仅仅包含一行代码,那么它可以和前面的语句写在同一行上。如if make_hard_copy: send_data_to_printer(),这样的单行语句是合法的, 尽管它可能方便,但这样会使得代码更难阅读, 所以推荐将这行代码移到下一行并合理地缩进。另外一个原因就是如果你需要添加新的代码,你还是得把它移到下一行。
2、else语句
       Python提供了与if语句搭配使用的else语句,如果if语句的条件表达式的结果布尔值为假,那么程序将执行 else 语句后的代码。其语法如下:

if expression:
 expr_true_suite
else:
 expr_false_suite

        在C语言中,不会在条件语句范围外发现else语句, 但Python不同,可以在while和for循环中使用else语句,在循环中使用时,else子句只在循环完成后执行,也就是说break语句也会跳过else块。
         例:显示出10到20中的数字的最大约数

在CODE上查看代码片派生到我的代码片

 #!/usr/bin/env python 
  
 def showMaxFactor(num): 
  count = num / 2 
  while count > 1: 
   if (num % count == 0): 
   print 'largest factor of %d is %d' % (num,count) 
   break 
   count = count - 1 
  else: 
  print eachNum,'is prime' 
  
 for eachNum in range(10,21): 
  showMaxFactor(eachNum) 

在CODE上查看代码片派生到我的代码片

 largest factor of 10 is 5 
 11 is prime 
 largest factor of 12 is 6 
 13 is prime 
 largest factor of 14 is 7 
 largest factor of 15 is 5 
 largest factor of 16 is 8 
 17 is prime 
 largest factor of 18 is 9 
 19 is prime 
 largest factor of 20 is 10 

3、elif (即else-if )语句
        elif是Python的else-if 语句,它检查多个表达式是否为真,并在为真时执行特定代码块中的代码。和else一样,elif 声明是可选的,然而不同的是if 语句后最多只能有一个else语句,但可以有任意数量的 elif 语句。

if expression1:
 expr1_true_suite
elif expression2:
 expr2_true_suite
 ...
elif expressionN:
 exprN_true_suite
else:
 none_of_the_above_suite

        在将来的某天,Python可能会支持 switch /case语句,但是完全可以用其他的Python结构来模拟它。在Python中,大量的if-elif 语句并不难阅读。
在CODE上查看代码片派生到我的代码片

 if user.cmd == 'create': 
  action = "create item" 
 elif user.cmd == 'delete': 
  action = 'delete item' 
 elif user.cmd == 'update': 
  action = 'update item' 
 else: 
  action = 'invalid choice... try again!' 

       上面的语句还可以用序列和成员关系操作符来简化它:

在CODE上查看代码片派生到我的代码片

 if user.cmd in ('create','delete','update'): 
  action = '%s item' % user.cmd 
 else: 
  action = 'invalid choice... try again!' 

       还可以用Python字典给出更加优雅的解决方案,使用映射对象(比如字典)的一个最大好处就是它的搜索操作比类似语句或是 for 循环这样的序列查询要快很多。

在CODE上查看代码片派生到我的代码片

 msgs = {'create': 'create item','delete': 'delete item','update': 'update item' 
   } 
 default = 'invalid choice... try again!' 
 action = msgs.get(user.cmd,default) 

4、条件表达式(即"三元操作符")
       三元运算符语法为:X if C else Y,只需要一行完成条件判断和赋值操作:

在CODE上查看代码片派生到我的代码片

 >>> x,y = 4,3 
 >>> smaller = x if x < y else y 
 >>> smaller 
 3 

5、while语句
      while是一个条件循环语句,与if声明相比,如果 if 后的条件为真,就会执行一次相应的代码块。而while中的代码块会一直循环执行,直到循环条件不再为真。
(1)一般语法
       while循环的语法如下:

while expression:
 suite_to_repeat

        while循环的suite_to_repeat子句会一直循环执行,直到expression值为布尔假。
(2)计数循环

count = 0
while (count < 9):
 print 'the index is:',count
 count += 1

       代码块里包含了print和自增语句,它们被重复执行,直到count不再小于9。索引count在每次迭代时被打印出来然后自增 1。
(3)无限循环

while True:
 handle,indata = wait_for_client_connect()
 outdata = process_request(indata)
 ack_result_to_client(handle,outdata)

       “无限”循环永远不会结束,但它不一定是坏事,许多通讯服务器的客户端/服务器系统就是通过它来工作的。
6、for语句
        Python提供了的另一个循环机制就是for语句,它是Python中最强大的循环结构。它可以遍历序列成员,可以用在列表解析和生成器表达式中,它会自动地调用迭代器的next()方法,捕获StopIteration异常并结束循环(所有这一切都是在内部发生的)。 Python的for更像是shell或是脚本语言中的foreach循环。

(1)一般语法
       for循环会访问一个可迭代对象(例如序列或是迭代器)中的所有元素,,并在所有条目都处理过后结束循环。它的语法如下:
for iter_var in iterable:
    suite_to_repeat
        每次循环, iter_var迭代变量被设置为可迭代对象(序列、迭代器或者是其他支持迭代的对象)的当前元素,提供给suite_to_repeat 语句块使用。
(2)用于序列类型
       for循环可以迭代不同的序列对象,像字符串、 列表、以及元组。
       迭代序列有三种基本方法:
通过序列项迭代
在CODE上查看代码片派生到我的代码片

 >>> nameList = ['Walter',"Nicole",'Steven','Henry'] 
 >>> for eachName in nameList: 
 ...  print eachName,"Lim" 
 ... 
 Walter Lim 
 Nicole Lim 
 Steven Lim 
 Henry Lim 

        迭代一个列表.。每次迭代,eacgName变量都被设置为列表中特定某个元素。
通过序列索引迭代
在CODE上查看代码片派生到我的代码片

 >>> nameList = ['Cathy',"Terry",'Joe','Heather','Lucy'] 
 >>> for nameIndex in range(len(nameList)): 
 ...  print "Liu,",nameList[nameIndex] 
 ... 
 Liu,Cathy 
 Liu,Terry 
 Liu,Joe 
 Liu,Heather 
 Liu,Lucy 

 

      没有迭代元素,而是通过列表的索引迭代。但通过直接迭代序列要比索引迭代快。
使用项和索引迭代
在CODE上查看代码片派生到我的代码片

 >>> nameList = ['Donn','Shirley','Ben','Janice','David','Yen','Wendy'] 
 >>> for i,eachLee in enumerate(nameList): 
 ...  print "%d %s Lee" % (i+1,eachLee) 
 ... 
 1 Donn Lee 
 2 Shirley Lee 
 3 Ben Lee 
 4 Janice Lee 
 5 David Lee 
 6 Yen Lee 
 7 Wendy Lee 

(3)用于迭代器类型
        用for循环访问迭代器和访问序列的方法差不多,迭代器并不代表循环条目的集合,迭代器对象有一个next()方法, 调用后返回下一个条目。 所有条目迭代完后, 迭代器引发一个StopIteration异常告诉程序循环结束,for语句在内部调用next()并捕获异常。
        使用迭代器做 for 循环的代码与使用序列条目几乎完全相同。事实上在大多情况下,无法分辨出迭代的是一个序列还是迭代器,因此遍历一个迭代器时,实际上可能指的是要遍历一个序列、迭代器或是一个支持迭代的对象(它有 next()方法)。
(4)range()内建函数
        内建函数range()可以把类似foreach的for循环变成你更加熟悉的语句。
        Python提供了两种不同的方法来调用range() ,完整语法要求提供两个或三个整数参数:range(start,end,step =1),range()会返回一个包含所有k的列表,其中start <= k < end,从start到end ,k每次递增 ste,step不可以为零,否则将发生错误。 
在CODE上查看代码片派生到我的代码片

 >>> range(3,7) 
 [3,4,5,6] 
 >>> for eachVal in range(2,19,3): 
 ...  print "value is:",eachVal 
 ... 
 value is: 2 
 value is: 5 
 value is: 8 
 value is: 11 
 value is: 14 
 value is: 17 

 

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读