如果一个数字是素数,这个函数应该返回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
9
则9%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
循环中的if
和else
。理解返回的含义,当您返回时,函数实际上会退出。更正的代码:
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)