【发布时间】:2017-05-07 14:05:25
【问题描述】:
所以我对 python 很陌生,想知道为什么这段代码不适用于某些数字。 (例如 12 和 60)(编辑:它只是说一个因数,不是素数。12 是 4,60 是 12)
def Prime(var):
for n in range(var-1, 1, -1):
if var % n == 0:
for x in range(2, n):
if n % x == 0:
n = n-1
continue
else:
if (var % n == 0):
print("the largest prime factor of", var, "is", n)
break
n = n-1
continue
break
else:
print(var, "is already a prime number")
我很确定,有多行代码是不需要的,而且这段代码效率很低,但我真的不明白为什么这行不通。因此,如果有人可以在这里帮助我并修复它,那就太好了。
提前致谢
【问题讨论】:
-
解释如何它不起作用。是有错误,还是只是产生了错误的输出?
-
@JohnColeman 我怀疑第一行下的所有内容都需要缩进一级,这只是因为 OP 不熟悉 SO 代码块的工作方式。
-
在 Stack Overflow 中发布代码可能很棘手。在诸如 Java 之类的某些语言中,这并不重要(很多),但在 Python 中,它可以无可救药地混淆逻辑。在实践中我们可以猜出你的意思,但有时我们猜错了。我建议简单地删除代码,然后在阅读后将其放回:meta.stackexchange.com/questions/22186/…
-
@JohnColeman 其他明显的缩进错误不是错误 - OP 在其 for 循环中使用 else 子句。 OTOH,代码没有做他们期望的事情,例如在 for 循环结束时使用
n作为循环变量做n=n-1是无用的。 -
@PM2Ring
else子句可能在 for 循环中(通常不教初学者),但它们也可能与一些if语句一起使用,并且不知何故变得乱码通过OP尝试粘贴代码。无论哪种情况,逻辑都很模糊。我宁愿 OP 修复缩进,也不愿猜测它是什么。
标签: python python-3.x prime-factoring