我在编写这段代码时遇到问题,我正在编写以检查数字是否为素数。
import sys
import math
def is_prime(num):
for j in range(2,(int(math.sqrt(num)+1))):
if (num % j) == 0:
return False
else:
return True
for a in range(1,10):
if is_prime(a):
print a
我得到的是:5,7,9
我不明白为什么3被排除在外?我回到代码的第一部分并尝试了is_prime(3)
,但它既不是真也不是假。这是否意味着3超出我正在检查的除数范围?我应该如何更正代码,使得3包含在我的素数列表中?
编辑:
再次问好,感谢目前为止的答案,所以我试图用int(round())来解决截断问题。我也尝试将else
块放在循环外部,但它似乎不起作用。任何人都可以解释为什么这是不够的,并建议我应该如何纠正它,以便它的工作原理?提前致谢! :)
import sys
import math
def is_prime(num):
for j in range(2,int(round(math.sqrt(num)+1)):
if (num % j) == 0:
return False
return True
答案 0 :(得分:2)
一旦发现该号码不能被任何 True
整除,您的函数就会返回j
。如果该号码不能被所有 True
整除,则只应返回j
。
作为修复此错误的副作用,您还可以修复错误,因为您的函数有时会返回None
(例如,当num
为3
时)。
答案 1 :(得分:1)
int()
截断,而不是舍入,所以int(math.sqrt(3) + 1) == 2
。 range(2, 2)
为空,因此不会返回任何内容。
另一个问题是,您的else
块在循环内。如果您测试前100个数字,您会很快发现is_prime
函数会返回True
任何奇数。
答案 2 :(得分:0)
3的平方根小于2,因此永远不会输入循环,也不会返回任何内容。