在 Python 中寻找素数
Finding prime numbers in Python
我需要编写一个函数,is_prime()
,它接受一个整数 n > 1 和 returns TRUE
如果数字是质数和 False
除此以外。但是当我输入2时,它总是returns False
。有没有办法纠正这个问题?
def is_prime(x):
if(x > 1):
for i in range(2,x+1):
if( x % i == 0):
return False
else:
return True
else:
return False
两期:
第一个问题是范围包括数字本身,这意味着它总是 return true(对于数字 > 1),因为质数可以自除...
修复:将 range(2,x+1)
更改为:range(2, x)
第二个问题,第一个else
应该与for
对齐(我们return只有在尝试所有数字并确保其中none之后才正确除 x
)
固定码:
def is_prime(x):
if x > 1:
for i in range(2,x):
if x % i == 0:
return False
else:
return True
else:
return False
尽管@alfasin 的解决方案是正确的 (+1),但我发现 else
的使用使理解起来更具挑战性。
for
循环中的 else
特别需要我重新阅读 Python 文档,因为大多数消息来源都说 else
意味着 no break但确实表示正常完成,在一个根本没有 运行 的循环!
这是我的修改,删除了并非严格需要的 else
语句:
def is_prime(x):
if x > 1:
for i in range(2, x):
if x % i == 0:
return False
return True
return False
正如其他人会指出的那样,这可能是您可以编写的最低效的主要测试。但它有效。
除此之外,您还可以使用 SymPy 模块
import sympy
sympy.isprime(5)
结果:
True
我需要编写一个函数,is_prime()
,它接受一个整数 n > 1 和 returns TRUE
如果数字是质数和 False
除此以外。但是当我输入2时,它总是returns False
。有没有办法纠正这个问题?
def is_prime(x):
if(x > 1):
for i in range(2,x+1):
if( x % i == 0):
return False
else:
return True
else:
return False
两期:
第一个问题是范围包括数字本身,这意味着它总是 return true(对于数字 > 1),因为质数可以自除...
修复:将 range(2,x+1)
更改为:range(2, x)
第二个问题,第一个else
应该与for
对齐(我们return只有在尝试所有数字并确保其中none之后才正确除 x
)
固定码:
def is_prime(x):
if x > 1:
for i in range(2,x):
if x % i == 0:
return False
else:
return True
else:
return False
尽管@alfasin 的解决方案是正确的 (+1),但我发现 else
的使用使理解起来更具挑战性。
for
循环中的 else
特别需要我重新阅读 Python 文档,因为大多数消息来源都说 else
意味着 no break但确实表示正常完成,在一个根本没有 运行 的循环!
这是我的修改,删除了并非严格需要的 else
语句:
def is_prime(x):
if x > 1:
for i in range(2, x):
if x % i == 0:
return False
return True
return False
正如其他人会指出的那样,这可能是您可以编写的最低效的主要测试。但它有效。
除此之外,您还可以使用 SymPy 模块
import sympy
sympy.isprime(5)
结果:
True