到目前为止我所做的是:
def check_prime(x):
if x >= 2:
for n in range(2, x - 1):
if x % n == 0:
return False
else:
return True
else:
return False
但是,当我检查任何一个数>;=2是否为素数时,它返回None
,而不是True
或{}。check_prime(0)
返回False
和{}返回False
。为什么任何数字>;=2都会返回None
以及如何修复此问题
Tags:
问题1:问题是
range(n, x-1)
。在如果您的输入是2或3,
range(2, x-1)
将是一个空列表,因为range
的第二个参数是排他的。在因为你只在for循环内部返回,它永远不会返回那里,所以它返回None(也就是说,它什么也不返回)。在
问题2:除了从不进入for循环if}之外,您的代码还有一些问题。在
x = 2
或{正如您编写的,它将在第一次迭代中返回。当然,如果}。但是,即使
x % n == 0
你知道x
不是质数,可以返回{n
不是x
的一个因素,你仍然需要检查其他潜在因素。在您应该在for循环之外返回
True
,而不是在循环内部。在解决方案:
您的函数是错误的,因为您不应该在循环中返回True(在您的代码中,循环将始终运行一次)。在
签出正在工作的小提琴:http://pythonfiddle.com/check-prime
除此之外,您还可以通过将
x
(取整)的平方根作为循环的终点(不要忘记+1,因为range
不包含)。因为一旦你超过平方根你就会得到镜像选项。(6×4=4×6=20。20的平方根是5)。在这是你的固定密码。其中有多个问题,即:
2
时,您进入了if
循环,但是循环没有执行,因此得到了None
。在n
的每一个数(好吧,当你优化你的代码:)
)时,你不必检查,但是如果我有一个像99=3*33这样的数字,它就不能被2整除,并且会将它分类为一个素数,尽管它是一个复合数。在您可以进行一些基本的优化,例如检查最多为
sqrt(n)
的数字,检查数字是否可以被2整除以放弃一半的选择,等等'
相关问题 更多 >
编程相关推荐