Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中查找素数_Python_Python 3.x_Primes - Fatal编程技术网

在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)时,它将不会显示任何内容。@Marcus
range(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)时,它将不会显示任何内容。@Marcus
range(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呢?