如果数字为素数,则该函数应返回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
答案 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
如果x
为9
,则为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
循环中的else
和for
。
理解返回的意义,当你返回时,函数就会退出。
更正后的代码:
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
需要放在循环之后(在它之外)。