Codecademy Python “is_prime”练习在“熟能生巧”——真的是迭代吗?



如果一个数字是素数,这个函数应该返回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

因为如果你写

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

如果x 99%2 != 0,因此它采用else路径并返回True

odd_number % 2总是= 1

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

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)

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

函数有问题。 循环内的else: True第一次遇到不是除数的数字时返回。 这需要删除,并且需要将return True放在循环之后(循环外部(。

检查缩进。for循环中的ifelse。理解返回的含义,当您返回时,函数实际上会退出。更正的代码:

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)

相关内容

最新更新