for/while else你理解了?

2020-05-12 10:48:42 浏览数 (1)

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语句。

(全文完)

0 人点赞