for n in range(3,10):
for m in range (3,n):
if n%m==0:
print(n, "not prime")
break
else :
print(n,"prime")
for n in range(3,10):
for m in range (3,n):
if n%m==0:
print(n, "not prime")
else :
print(n,"prime")
我想知道在两个代码中使用else之间的区别
答案 0 :(得分:0)
代码示例1:一旦我们确定n不能是素数,该代码就会从循环中断开。 else语句与'for m'循环相关联,并且只要for循环正常退出就会执行(即,它会在没有中断的情况下到达范围的末尾)
for n in range(3,10):
for m in range (3,n):
if n%m==0:
print(n, "not prime")
break
else :
print(n,"prime")
使用else并不是一种黑客攻击(正如其他地方所建议的那样 - 黑客攻击本身不应该起作用,但确实有效) - 它是一种故意设计的语言部分,专为这些情况而设计
代码示例2:当我们知道n是非素数并且此处的else与if相关联时,代码不会中断,并且只要if语句的条件为假(即n%m!=时) 0)。这个版本是错误的,因为你可能会被告知给定的数字是素数而不是素数多次。
for n in range(3,10):
for m in range (3,n):
if n%m==0:
print(n, "not prime")
else :
print(n,"prime")
总结 - 代码示例1是正确的,因为它正确地报告3到9之间的每个数字是否是素数。严格来说,内循环可以是:
for m in range(3, n/2):
没有功能损失。
答案 1 :(得分:0)
for n in range(3,10):
for m in range (3,n):
if n%m==0:
print(n, "not prime")
break
else:
print(n,"prime")
输出: -
(3, 'prime')
(4, 'prime')
(5, 'prime')
(6, 'not prime')
(7, 'prime')
(8, 'not prime')
(9, 'not prime')
这里break
打破内部for循环并执行else语句。
而在第二次
for n in range(3,10):
for m in range (3,n):
if n%m==0:
print(n, "not prime")
else :
print(n,"prime")
输出: -
(4, 'prime')
(5, 'prime')
(5, 'prime')
(6, 'not prime')
(6, 'prime')
(6, 'prime')
(7, 'prime')
(7, 'prime')
(7, 'prime')
(7, 'prime')
(8, 'prime')
(8, 'not prime')
(8, 'prime')
(8, 'prime')
(8, 'prime')
(9, 'not prime')
(9, 'prime')
(9, 'prime')
(9, 'prime')
(9, 'prime')
(9, 'prime')
它继续在内循环中。
查看for else
条款。
答案 2 :(得分:-1)
这是一个早期破解外循环的黑客,目前不是语法错误。例如,
https://stackoverflow.com/a/654002/921082
但我不建议你这样做,因为它经常会破坏理解。如果内循环停止,您总是可以使用True / False标志来停止外循环。