一个关于100以内素数的提问
各位大神!新手小白写了个程序,需要输出100以内所有的素数,冥思苦想试了很多次,成功了但是不知道原理,求帮忙解释一下QAQ
先贴代码
for i in range(2,101):
for j in range(2,i):
if i%j==0:
break
else:
print(i)
这个程序可以成功输出结果,但是else的位置试了很多次,最后巧合放在这里才成功。求问各位大神为什么else不能对应if?
即
for i in range(2,101):
for j in range(2,i):
if i%j==0:
break
else:
print(i)
这样运行输出时数字会不断重复orz但是跟上面那种方式有什么区别呢 这个else是和for配对的,当for循环没有执行break,正常循环完毕则执行后面的else部分。
你如果把 else 放入 for 循环的 if 下面,每次 for 循环时if 不成立 都会执行一次 else 导致打印了许多无用的结果
而 if 条件是为了判断是否被整除了,若 if 条件成立那么此时说明就不是素数,没有必要继续循环下去,break 退出循环
而 for 和 else 配合使用是只有在 for 循环正常结束(可以理解为不是 break 导致退出的循环)那么就会执行 else 的代码块
而你如果在 for 循环完整结束后没有执行 if 下面的代码块 break ,那么说明这个数确实只被 1 和本身整除,符合素数条件,才执行 for 循环的else 打印出素数 Twilight6 发表于 2020-11-26 15:51
你如果把 else 放入 for 循环的 if 下面,每次 for 循环时if 不成立 都会执行一次 else 导致打印了许多 ...
谢谢谢谢!请问是否可以理解为当 for 对应 else 时,只有所有的 j 都不符合break条件才会执行else中print(i)的代码,而与 if 对应时,j 的值每尝试一次如果不符合 if 语句都会执行print? AresFC 发表于 2020-11-26 16:10
谢谢谢谢!请问是否可以理解为当 for 对应 else 时,只有所有的 j 都不符合break条件才会执行else中print ...
没错~~
Twilight6 发表于 2020-11-26 16:14
没错~~
好的!!炒鸡感谢~!
页:
[1]