python中for循环和while循环else语句的执行过程和陷阱

本文介绍了Python中的for和while循环如何使用else子句,强调了else子句会在循环正常结束时执行,而不会在break语句触发时执行。通过示例代码解释了常见错误和陷阱,如在查找列表元素时如何正确使用else语句避免逻辑错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Python中,有while和for两种循环,并且都可以带有else子句,都有什么区别呢?

  • while循环常用于无法提前确定循环次数的场合,当然也可以用于循环可以提前确定的场合。

  • for循环常用于可以提前确定循环次数的场合,尤其适合用来迭代或遍历可迭代对象中的元素,这也是for循环的本质。


什么时候执行else,什么时候不执行else语句

  • 对于带有else子句的循环,如果是因为循环条件不成立序列中的元素已迭代结束而使得循环自然结束,则继续执行else子句中的代码。

  • 如果是因为执行了break语句使得循环提前结束,则不再执行else子句中的代码。简单来说,break跳出执行的不仅是for后面的代码,同时会跳出执行else后面的代码。


for…else…正确代码示例和说明

num = int(input('请输入一个数字:'))

for test in range(2,num):
    if num%test == 0:
        print('是合数')
        break               # else是for里面的一部分,break会同时退出
    else:
        continue
else:
    print('是质数')

代码说明

  1. 这里第6行的break一旦执行,会同时跳出第7行的else语句和第9行的else

  2. 第8行的continue一旦执行,从逻辑上就不会执行第9行的else

  3. 什么时候会执行第9行的else

    当第3行的for test in range(2,num):完全执行结束之后,即test = num的时候。

所以这段程序完全等价于下面这段程序(仅仅第9行有变化)

num = int(input('请输入一个数字:'))

for test in range(2,num):
    if num%test == 0:
        print('是合数')
        break               # else是for里面的一部分,break会同时退出
    else:
        continue
if test == num:		       # 原来是else:
    print('是质数')

for循环搭配else常见错误和陷阱

错误代码示范

例如我想寻找一个列表list里的特定的数字100,代码如下

list = [34, 756, 234, 21, 100]
for num in list:
    if num == 100:
        print('found 100')
else:							# 注意这是for循环中的else,不是if的else
    print('not found 100')

运行结果:

found 100
not found 100

Process finished with exit code 0

为什么又打印出了not found 100呢?

因为for循环迭代结束了,而且是正常结束的,所以会接着执行else语句,逻辑完全没有问题。

是我们写代码的时候出的问题,找到之后不应该退出循环吗?所以应该加上break语句


正确代码示范

修改之后的代码如下:

list = [34, 756, 234, 21, 100]
for num in list:
    if num == 100:
        print('found 100')
        break
else:
    print('not found 100')

运行结果:

found 100

Process finished with exit code 0

因为在执行完print('found 100')之后,又执行了break,所以会一并跳出第6行的else语句。在书写的时候我们一定要当心,把elsebreakcontinuepass这些东西都写全,这段代码严谨一点应该修改为:

list = [34, 756, 234, 21, 100]
for num in list:
    if num == 100:
        print('found 100')
        break
    else:
        pass
        # 或者写成continue
else:
    print('not found 100')

参考文章

  1. Python中带else子句的for循环执行过程 - Python小屋 - 优快云博客
    https://blog.youkuaiyun.com/oh5W6HinUg43JvRhhB/article/details/78883502

  2. Python中for循环搭配else的陷阱 - icebug - 博客园
    https://www.cnblogs.com/dspace/p/6622799.html

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值