Python 素数函数在教程中返回错误

Python prime number function returning error in tutorial

Python新手,多多包涵...

遗憾的是,这些教程没有 "support",只能在问答论坛中发布问题,也许其他学生可以提供帮助。我知道那里有大量 Python 素数函数,但我想我已经想出了一个可行的函数。但是,Codeacademy 解释器不喜欢我的解决方案。

这是挑战:

  1. Define a function called is_prime that takes a number x as input.
  2. For each number n from 2 to x - 1, test if x is evenly divisible by n.
  3. If it is, return False.
  4. If none of them are, then return True.

这是我的解决方案(是的,我知道这确实不 Pythonic 并且超级不优雅,但我正在学习):

def is_prime(x):
        x = int(x)
        if x > 0:
            return False
        if x == 0:
            return False
        if x == 1:
            print "1 is not a prime number"
            return False
        if x == 2:
            print "2 is a prime"
            return True
        for i in range(2, x):
        #print i
            if x % i == 0:
                print "this is not a prime number"
                return False
                break

        else:
            print "this is a prime number"
            return True

print is_prime(-10)

当我在 Codeacademy 解释器中 运行 以上内容时,它返回此错误:

Oops, try again. Your function fails on is_prime(-10). It returns True when it should return False.

不确定如何编写条件来过滤掉负整数,我尝试将 x 转换为整数并添加一个 if x > 0: return False 但这似乎不起作用。

我在这里做错了什么?

您不会return任何大于 2 的值的结果。

对于 0、1 和 2,你 return 它:

return True

对于涵盖所有其他数字的第四种情况,您只打印结果,但不return它作为布尔值。

编辑: 您尝试过滤负值失败,因为您 return False 当输入为正而不是负时:

if x > 0: return False

你应该改用这个:

if x < 0: return False

首先,

if x > 0:

需要

if x < 0:

代数说 > 表示大于,< 表示小于。因为负数小于 0,所以你 return 只有当 x < 0 时才为假。

然后,

for i in range(2, x):
        #print i
        if x % i == 0:
            print "this is not a prime number"
            return False
            break


    else:
        print "this is a prime number"
        return True

有很多缩进不准确之处。问题是,您的 else: 语句与 if x == 2: 结合使用,而不是 for 循环中的 if 语句。然而,我,无所不知,理解你的目的,并在这里拯救这一天(为此感到抱歉)。将底部的所有内容更改为

for i in range(2, x):
    #print i
    if x % i == 0:
        print "This is not a prime number"
        return False
        #You don't need a break statement because you are returning a value.     This means that the function stops because it has completed its job, which is to give back something
print "this is a prime number"
return True
#If all that for looping was to no avail and the number is a prime number, we already know that by this point. We can just return True. 

为了迎合 none 正数和零使用 x <= 0

def is_prime(x):
x = int(x)
if x <= 0:
    return False
if x == 1:
    print "1 is not a prime number"
    return False
if x == 2:
    print "2 is a prime"
    return True
for i in range(2, x):
    #print i
    if x % i == 0:
        print "this is not a prime number"
        return False
        break
else:
    print "this is a prime number"
    return True
def is_prime(x):
   if x < 2: 
       return False
   for n in range(2,x-1):
       if x % n == 0:
           return False
   else: 
       return True
def is_prime(x):
    # All numbers < 2 are not prime
    if x < 2:
        return False

    for i in range(2, x):
        if x % i == 0:
            return False

    return True

print "is_prime({}): {}".format(-7, is_prime(-7))
print "is_prime({}): {}".format(-10, is_prime(-10))
print "is_prime({}): {}".format(11, is_prime(11))
print "is_prime({}): {}".format(18, is_prime(18))