目录
本周开使python基础知识的学习,正式进入学习代码编写的阶段了。本周有一个较典型的题目,困扰我很久,所以在这里做一个总结,希望对您有帮助。
一、题目
通过代码实现得出100-200之间的素数?
提示:素数的特征是除了1和其本身能被整除,其它数都不能被整除的数
二、错误答案
for i in range(100,201):
for j in range(2,i):
if i % j == 0:
break
print(i)
以上是我写的答案,这样得出的结果,素数找全了,但是每个素数都被打印了100遍。
三、错误答案解析
以上错误答案的问题出现在 for j 的内循环里。这样写的话,如果i不能被j整除,那么i就会被打印一遍,直到遇见第一个能整除i的j,内循环才会被打断。最后的结果就是i遍历到第几个j被打断,就会被打印几遍,素数一直都不会被打断,所以所有的素数都被打印了100遍。
四、正确方法及解析
我的初衷就是内循环完整的走完流程,再打印i,思路是对的,但是不会写。后来参考老师的思路,找到了以下两种解决办法:
(一)方法一及解析
for i in range(100,201):
is_breaked = False
for j in range(2,i):
if i % j == 0:
is_breaked = True
break
if is_breaked == False:
print(i)
此方法的思路是用一个变量记录我想要的状态,如果is_breaked的状态没有被改变,还是False,那么就代表循环完整的走完了,那就代表此数为素数。
(二)方法二及解析
for i in range(100,201):
j = 0
for j in range(2,i):
if i % j == 0:
break
if j == i-1:
print('%d是素数' % i)
此方法的思路是用 j在结束循环时被赋值的数值来记录,j的数值也能表示循环走没走完。当j=i-1时,就是代表完整走完了。j的初始值可以任意取值。