我在python中编写了以下代码(不适用于-ve值):

时间:2016-08-02 14:56:44

标签: python-3.x if-statement primes

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。请帮忙。

2 个答案:

答案 0 :(得分:0)

问题是你正在检查for循环中的数字是否为负数。例如,如果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)

答案 1 :(得分:0)

根据它的小学定义, prime 数字仅为正数定义,因此您的函数应为每个负数返回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 为素数,则 -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