在Python中生成素数列表
我用这段代码得到了一个整数“x”以下的素数列表,但我不确定我错在哪里在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
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太棒了!请投票并接受答案。看见