函数is_prime - 错误

时间:2013-12-22 10:10:22

标签: python math numbers primes

这是来自codeacademy.com的问题,我正在学习Python。 所以我想要的是定义一个检查数字是否为素数的函数。 如果是,则返回True。 如果不是,则返回False。

这是我的代码:

def is_prime(x):
    lst = []       # empty list to put strings 'False' and 'True'

    for i in range(2,x): # starting at 2 and not including x (number 1 is a divisor of all numbers

        if x <= 2:           # [1] see bellow the explanation
            lst.append('False')
            break

        elif x % i == 0: # if x is divisible by i(number between 2 and not including x)
            lst.append('False')
            break        # break, because we already know x is not prime

        elif x % i > 0:
            lst.append('True') # x is not divisible by i

    if 'False' in lst:
        return False     #  x is not prime - return False

    else:
        return True  # 'True' is in lst, so x is prime - return True

print is_prime(-2) # [2] I get an error here. See below

[1] - 我做了这个条件,因为在codeacademy中它说:     “暗示     请记住:所有小于2的数字都不是素数!“

[2] - 当我跑步时,例如,'print is_prime(11)'或'is_prime(6)'就可以了。所以我提交了答案,但是codeacademy不接受它。它说: “你的函数在is_prime(-2)上失败。当它返回False时返回True。”

3 个答案:

答案 0 :(得分:11)

让我们看看当您输入-2时会发生什么:

  • range(2,-2)为空,因此for循环永远不会运行。
  • 因此,循环后lst仍为[]
  • 因此,'False' in lstFalse
  • 因此,return True已执行。

答案 1 :(得分:4)

x-2时,range(2, x)会生成一个空列表。

print range(2, -2) # will print []

因此,循环内的循环和if条件将不会被执行。将检查最后一个if条件,并且'False'中没有lst。因此,它返回True

您可以像这样编写相同的程序

def is_prime(x):
    if x < 2:
        return False
    prime_flag = True
    for i in range(2,x):
        if x % i == 0:
            prime_flag = False
            break
    return prime_flag

print is_prime(-2)

答案 2 :(得分:0)

def is_prime(x):  
    if x < 2:  
        return False  
    for n in range(2, (x)-1):  
        if x % n == 0:  
            return False  
    return True