Python中的for,else问题

:今天学习了python入门的查找素数的方式,刚开始尝试了一下方式:

for n in range(2,20):
    i=0 #素数标志位
    for x in range(2,n):
        if n%x==0:
            i=1 #标志位写1,表示不是素数
            print(n,"=",x,"*",n//x)
    if i==0:
            print(n,"是素数\n")

主要是通过标志位i是否在检查余数的过程中被置1,如果置1则说明是合数,很直观。

但教程中使用了以下写法:

for n in range(2,20):
    for x in range(2,n):
        if n%x == 0:
            print(n,"=",x,"*",n//x)
            break
    else:
        print(n,"是素数\n")

其中else让我感觉到迷惑,主要是不知道else的运行条件是什么,查询之后得知只要for循环正常结束就进入else。令我疑惑的是,如果for循环不论如何不都会结束吗,那不每个数都变成了素数?

于是我删除else:

for n in range(2,20):
    for x in range(2,n):
        if n%x == 0:
            print(n,"=",x,"*",n//x)
            break
    
    print(n,"是素数\n")

发现会变成我上述猜想的情况,即只要for循环结束就会最后一句执行print,这当然是错误的,那么问题在哪呢?

后来我终于理解,else的存在正是避免了break结束for循环的状态,因为break是“非正常结束”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值