:今天学习了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是“非正常结束”。