Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.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 - Fatal编程技术网

在Python中生成素数列表

在Python中生成素数列表,python,Python,我用这段代码得到了一个整数“x”以下的素数列表,但我不确定我错在哪里 from math import sqrt def prime_detector(x): for i in range(3, x+1): numbers = [] Status = True for j in range(2, int(sqrt(i)+1)+1): if i%j == 0: Status = Fal

我用这段代码得到了一个整数“x”以下的素数列表,但我不确定我错在哪里

from math import sqrt

def prime_detector(x):
    for i in range(3, x+1):
        numbers = []
        Status = True
        for j in range(2, int(sqrt(i)+1)+1):
            if i%j == 0:
                Status = False
        if Status == True:
            numbers += [i]
    return numbers

print(prime_detector(20))

把号码移到外面,它就会工作

from math import sqrt
def prime_detector(x):
    numbers = []
    for i in range(3, x+1):
        Status = True
        for j in range(2, int(sqrt(i)+1)+1):
            if i % j == 0:
                Status = False
                break
        if Status == True:
            numbers += [i]
    return numbers
print(prime_detector(20))
from math import sqrt
def prime_detector(x):
    numbers = []
    for i in range(3, x+1):
        Status = True
        for j in range(2, int(sqrt(i)+1)+1):
            if i % j == 0:
                Status = False
                break
        if Status == True:
            numbers += [i]
    return numbers
print(prime_detector(20))

Move number对象位于for循环内,对象的作用域是:)for,它将起作用

from math import sqrt
def prime_detector(x):
    numbers = []
    for i in range(3, x+1):
        Status = True
        for j in range(2, int(sqrt(i)+1)+1):
            if i % j == 0:
                Status = False
                break
        if Status == True:
            numbers += [i]
    return numbers
print(prime_detector(20))
from math import sqrt
def prime_detector(x):
    numbers = []
    for i in range(3, x+1):
        Status = True
        for j in range(2, int(sqrt(i)+1)+1):
            if i % j == 0:
                Status = False
                break
        if Status == True:
            numbers += [i]
    return numbers
print(prime_detector(20))
上面的代码还有一个问题:-2是一个素数,我们将不考虑这种情况。 因此,如果您想在列表中包含这2项,只需将其设置为:-
number=[2]
在上述代码中


如果您想改进它,请使用步骤as 6,并使用j和j+2检查条件。它将为您提供更优化的解决方案。

请提供错误消息并修复代码的格式。欢迎使用SO!看看这本书。对于调试问题,您需要提供一个。在这种情况下,您应该使用描述性标题并添加预期输出与实际输出,尽管我们可以推断出问题所在。你可以回答这个问题。如果您需要其他建议,请查看。顺便说一句,您可以使用
all
来简化:
if all(i%j!=0表示范围(2,int(sqrt(i)+1)+1)):number+=[i]
谢谢!明白了。@Yanshu太棒了!请投票并接受答案。看见