Codecademy Python“is_prime”练习在“练习完美”中 - 它真的迭代了吗?

时间:2015-10-22 19:40:52

标签: python

如果数字为素数,则该函数应返回True,否则返回False。问题是is_prime(9)会返回True

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

4 个答案:

答案 0 :(得分:1)

您的代码缩进不正确。 else:return True行应缩进一级,以便在for循环终止后运行。当任何 divisibilty测试失败时,当前代码返回True,而不是所有可分性测试失败时。

答案 1 :(得分:1)

因为如果你写的话

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

如果x9,则为9%2 != 0,因此需要else路径并返回True

odd_number % 2始终为= 1

您必须删除最后一行,并在return True完成后将其替换为for

def is_prime(x):
    if x<2:
        return False
    elif x==2:
        return True
    elif x==3:       #<-- This one is useless, it will be already checked within the for
        return True
    else:
        for i in range(2,x):
            if x%i==0:
                return False
                break
        return True

print is_prime(9)
print is_prime(11)

答案 2 :(得分:0)

检查缩进。 if循环中的elsefor。 理解返回的意义,当你返回时,函数就会退出。 更正后的代码:

def is_prime(x):
    if x<2:
        return False
    elif x==2:
        return True
    elif x==3:
        return True
    else:
        for i in range(2,x):
            if x%i==0:
                print "Hello"
                return False
                break
        else:
            return True

print is_prime(9)

答案 3 :(得分:0)

该功能有缺陷。第一次遇到不是除数的数字时,循环内的else:返回True。需要删除,return True需要放在循环之后(在它之外)。