用python打印50-100素数时为什么else要放在外面?

importmathforiinrange(50,100+1):
fortinrange(2,int(math.sqrt(i))+1):
ifi%t==0:
break
else:
print(i)
如果我这样写,打印出来的就是51,53,53,53,53,53....
importmathforiinrange(50,100+1):
fortinrange(2,int(math.sqrt(i))+1):
ifi%t==0:
break
else:
print(i)
当我把else拿出来的时候结果就正确了....但是我觉得这不符合逻辑啊?不是应该在for循环里面就打印吗?如果拿出来还在for循环里面吗?
慕妹3242003
浏览 378回答 2
2回答

一只萌萌小番薯

ok,我们分两点来说:1、你的算法逻辑上有问题。fortinrange(2,int(math.sqrt(i))+1):ifi%t==0:breakelse:print(i)你这段代码的目的是为了判断是否存在除1和本身外的其他约数。但是一旦i不能被t整除你就打印,这就错了,应该是整个for循环结束仍不存在其他约数才打印,比如99不能被2整除,在你这里就打印了,显然是错的。所以正确的做法是判断循环是否完成。怎么判断呢,一种是进行计数与int(math.sqrt(i))+1比较或者非正常结束打标记,但是python有更好的方法。这就要说到第二点。2、for……else语法,当for正常结束时执行else语句。这就是为什么你把else拿到外面一层结果正确的原因。

慕仙森

Pythonfor的语法,执行完循环条件之后,会进入else分支执行。foriinrange(3):print(i)else:print(i)结果:0122
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript