if elif else,for break continue pass,应该都见过,for else 和 while else组合的语句很少见,可用的场景也不多,但是了解他们的原理还是很有必要的,说不定哪天就可以用上了。
先来看到两道题,下面三个代码分别打印什么结果?
答案公布,看看和你的想法是不是一样?
代码-1结果:0 1 2 over 代码-2结果:0 代码-3结果:0 over
下面的while else原理也是一样的,根据上面的结果说说你的答案,可以下面留言哦~~
下面来看一个实际使用for else语句的案例,判断一个数是否为素数,传入一个大于1的数,可以判断出这个数是不是素数,使用格式如下。
在使用for else之前,可以尝试不使用这个方法看能不能够解决。
第一次尝试:
思路很简单,就是判断能不能对找到一个除了1 和 它 本身外的约数,如果可以那么就不是素数,否则是素数。
结果和我们的想象有点出入,之所以会这样,是因为只有对所有的数都判断完之后,才能确定这个数是否为素数,而我们每个数字进行判断后都会输出一个结果来,而我们想要的是直接给出最终的答案,所以这个思路还是有缺陷。
第二次尝试:
既然需要将所有的数字都判断完才能确定,那么就将print(f"{target}不是素数")放到for循环的外层。
如果是素数的话,的确达到我们想到的结果了,但是不是素数的话,执行完for循环后还是会执行后面的print语句。
第三次尝试
有什么方法可以让程序判断出不是素数就直接退出呢?这里因为刚好是在函数里,所以可以利用return替换break的方法,直接退出函数。
第四次尝试:
上面因为刚好是在函数里面,所以有点小技巧,那么不用return可不可以呢?那么我们就只能通过约数的个数来判断了,如果约数个数大于1个(除去1和本身外)就不是素数,否则就是。
到这里我们就解决了问题了。
尝试了这么多,就是为了解决:
1.当程序判断出素数后,可以通过break退出,不在执行后面的代码。
2.正常循环完所有情况之后,又可以执行后面的代码。
最终解决方法
而for else刚好就可以解决这个问题,可以看看下面的代码,注意里面的break不能省略。
总结
for else语句如果for循环时正常循环结束没有break的话,是会执行后面的else语句的;如果是break退出的话,就会跳出for循环,并且不在执行后面的else语句。
(全文完)