在Python中查找素数
我需要编写一个函数,在Python中查找素数,python,python-3.x,primes,Python,Python 3.x,Primes,我需要编写一个函数,is_prime(),它接受一个整数n>1,如果数字是质数,则返回TRUE,否则返回False。但是当我输入2时,它总是返回False。有没有办法纠正这个问题 def is_prime(x): if(x > 1): for i in range(2,x+1): if( x % i == 0): return False else: re
is_prime()
,它接受一个整数n>1,如果数字是质数,则返回TRUE
,否则返回False
。但是当我输入2时,它总是返回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
两个问题:第一个问题是范围包括数字本身,这意味着它将始终返回true(对于大于1的数字),因为素数可以自己除 修正:将
范围(2,x+1)
更改为:范围(2,x)
第二个问题,第一个else
应该与for
的对齐(只有在尝试所有数字并确保没有一个数字除以x
后,我们才会返回true)
固定代码:
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
两个问题:
第一个问题是范围包括数字本身,这意味着它将始终返回true(对于大于1的数字),因为素数可以自己除
修正:将范围(2,x+1)
更改为:范围(2,x)
第二个问题,第一个else
应该与for
的对齐(只有在尝试所有数字并确保没有一个数字除以x
后,我们才会返回true)
固定代码:
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
意味着没有中断,但它实际上意味着正常完成,这在根本没有运行的循环中是正确的
下面是我的重做,删除了不需要的else
语句:
def is_prime(x):
if x > 1:
for i in range(2, x):
if x % i == 0:
return False
return True
return False
正如其他人所指出的,这可能是一个低效的基本测试。虽然@alfasin的解决方案是正确的(+1),但我发现使用else
会让理解变得稍微有点困难
特别是for
循环中的else
要求我重新阅读Python文档,因为大多数来源都说else
意味着没有中断,但它实际上意味着正常完成,这在根本没有运行的循环中是正确的
下面是我的重做,删除了不需要的else
语句:
def is_prime(x):
if x > 1:
for i in range(2, x):
if x % i == 0:
return False
return True
return False
正如其他人所指出的,这可能是一个低效的基本测试。但它可以工作。您也可以使用模块来代替此操作
结果:
True
除此之外,您还可以使用模块
结果:
True
您编写了错误的代码。检查它是否为15。您的代码将显示它为prime。对于所有奇数,它将返回True!有什么方法可以改变它吗?非常感谢你的帮助。你写了错误的代码。检查它是否为15。您的代码将显示它为prime。对于所有奇数,它将返回True!有什么办法可以改变吗?非常感谢你的帮助。你好!如果我将范围更改为您提到的范围。当我在shell中键入is_prime(2)时,它将不会显示任何内容。@Marcusrange(2,x)
包括2和排除x
。所以是素数(2)
将返回true-这是应该的。我可以再问你一个问题吗?假设x=2。x%i将==0?再次阅读我之前的评论,range
排除x
;)使用它并亲自查看可能是一个好主意,例如,尝试运行以下代码:对于范围(2,2)内的i:print i
是的,我得到了它。假设x=9,(9%i)将是9%29%39%4…9%8。但是当9%2返回True,9%3返回False等等。那么程序到底怎么知道是返回True还是False呢?您好!如果我将范围更改为您提到的范围。当我在shell中键入is_prime(2)时,它将不会显示任何内容。@Marcusrange(2,x)
包括2和排除x
。所以是素数(2)
将返回true-这是应该的。我可以再问你一个问题吗?假设x=2。x%i将==0?再次阅读我之前的评论,range
排除x
;)使用它并亲自查看可能是一个好主意,例如,尝试运行以下代码:对于范围(2,2)内的i:print i
是的,我得到了它。假设x=9,(9%i)将是9%29%39%4…9%8。但是当9%2返回True,9%3返回False等等。那么程序到底如何知道是返回True还是False呢?