while和for循环用法

本文介绍python中的while循环、for循环。在python中for可以用于循环,也可用于另一种近亲的列表解析,列表解析是python中非常重要的特性,详细内容见后面的文章。一般来说,python写for循环比写while更容易、方便,而且python中的for比while效率要更高,如果可以,用for而不是while。while循环python中的while/for循环和其它语言的while循环有些不一样,它支持else分支。结构如下:1234while
摘要由CSDN通过智能技术生成

本文介绍python中的while循环、for循环。在python中for可以用于循环,也可用于另一种近亲的列表解析,列表解析是python中非常重要的特性,详细内容见后面的文章。

一般来说,python写for循环比写while更容易、方便,而且python中的for比while效率要更高,如果可以,用for而不是while。

while循环

python中的while/for循环和其它语言的while循环有些不一样,它支持else分支。结构如下:

while <CONDITION>:
    CODE
else:
    CODE_ELSE

注意,condition部分只能是表达式,不能是语句,所以condition中不能包含赋值语句,如while a = x:是错误的。

while和for的else分支表示当正常退出while/for循环的时候所执行的代码分支。所谓正常退出,是指不是通过break跳出的情况,也就是正常把所有循环条件轮完的情况。这对于那些需要通过设置标志位来判断的情况来说非常方便,而标志位通常是用于离开循环的时候,提供一个额外的标记、通知功能,比如退出循环时想找的数据是否找到。

例如搜索一个列表,并在退出时告知是否找到。如果使用标志位来实现,如下:


found = False

while x and not found:
    if match(x[0]):
        print("found it")
        found = True
    else:
        x = x[1:]

if not found:
    print("not found")

如果通过else,则逻辑更清晰:


while x:
    if match(x[0]):
        print("found it")
        break
    x = x[1:]
else:
    print("not found")

再例如,判断一个数(如下面的y)是否是质数。


y = 21

x = y // 2
while x > 1:
    if y % x == 0:
        print( y, "has a factor: ", x)
        break
    x -= 1
else:
    print("y is a prime")

想象一下如果不使用while的else,上面的功能该如何实现。

pass、break、continue、else

这几个关键字都能用在while/for中。

  • break:退出整个循环(while/for),如果嵌套了循环,则退出break所在的那个层次
  • continue:直接跳到下一次循环
  • else:在循环正常退出(不是break中断的循环)时执行的所执行的默认代码块
  • pass:在python中作为空的占位符,表示什么也不做。比如:
    • if x:pass
    • while x:pass
    • def x():pass
    • class x:pass

在python 3.x中,pass的另一种方式是...,它也表示什么也不做的占位符。

for循环

python中的for是一个通用的序列迭代器,和bash的for语法类似。python中没有for(i=0;i<N;i++)的语法,但for结合range可以实现一样的功能,后文介绍。

for语法:


for i in <Sequence>:
    CODE
else:
    CODE_ELSE

每次迭代时,for从序列中取一个元素赋值给控制变量i,下一轮迭代取下一个元素再赋值给i。和其它语言不太一样,for中的控制变量不会在for循环完后消失,它会保持最后一个被迭代的元素值。之所以会这样,是因为其它语言中for是一个代码块,而python中for不算是代码块,也就是说没有自己的名称空间。

实际上不止序列,只要是可迭代的对象,都能用for进行遍历。关于什么是可迭代的,将专门在迭代器相关的文章中解释。

例如,遍历一个字符串,因为它是序列


for i in 'xiaofang':
    print(i)

print("var i after: ",i)   # 输出g

遍历一个列表:


L = ["aa","bb","cc"]
for i in L:
    print(i)

嵌套:


L = ["aa","bb","cc"]
for i in L:
    for j in i:
   
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值