2016-08-02 65 views
-4
def isprime(x): 
for a in range(2,(x//2)+1): 
    if((x<=0) or (x%a==0)): 
    return(False) 
return(True) 

这并不适用于负值工作。例如:isprime(-3)返回True,但它必须返回False。请帮忙。我已经写在python下面的代码(不适用于-ve值工作):

+0

有人请帮忙 –

+0

当我试图通过传递负值来调用函数时,它总是返回true。 –

+0

首先,检查x <= 0时条件应该失败,并且必须返回false。但该函数返回true。 –

回答

0

通过它的小学定义,数为正数只定义了,因此你的函数应返回False每一个负数,例如:

def isprime(x): 
    if x <= 0: 
     return False 
    for a in range(2, (x//2)+1): 
     if x % a == 0: 
      return False 
    return True 

话虽这么说,它可以扩展定义(如数学中的某些字段中所做的),也包括负数(有关进一步讨论,请参见herehere)。在这种情况下,对于每个负数-n,-n是质数iff n是质数。因此你的代码可能是这样的:

def isprime(x): 
    if x <= 0: # or use any |abs| method you'd like, like numpy's 
     x = -x 
    for a in range(2, (x//2)+1): 
     if x % a == 0: 
      return False 
    return True 
def isprime(x): 
    if x <= 0: # or use any |abs| method you'd like, like numpy's 
     x = -x 
    for a in range(2, (x//2)+1): 
     if x % a == 0: 
      return False 
    return True 
0

问题是你正在检查数字是否为负循环内。例如,如果x = -3,那么你正在尝试在范围(2,-1)中运行一个for循环,它是None。所以for循环永远不会运行,因此返回True。

def isprime(x): 
if x<=0: 
    return(False) 
for a in range(2,(x//2)+1): 
    if(x%a==0): 
    return(False) 
return(True) 
相关问题