我的破译代码[Python初学者]在哪里
我试图返回一个包含所有素数的列表,最大值为某个数字(这是针对Project Euler问题7的假设)。我对Python非常陌生,但我这里的问题似乎不是语言,而是逻辑错误我的破译代码[Python初学者]在哪里,python,Python,我试图返回一个包含所有素数的列表,最大值为某个数字(这是针对Project Euler问题7的假设)。我对Python非常陌生,但我这里的问题似乎不是语言,而是逻辑错误 import math import sys def is_prime(n): if n%2 == 0: return False for i in range(3, int(math.sqrt(n))+1, 2): if n%i == 0: return
import math
import sys
def is_prime(n):
if n%2 == 0:
return False
for i in range(3, int(math.sqrt(n))+1, 2):
if n%i == 0:
return False
return True
def prime_counter(n):
result = [2]
while len(result) < n:
for i in range(3, sys.maxsize, 2):
if is_prime(i):
result.append(i)
break
return result
print (prime_counter(6))
导入数学
导入系统
def是_prime(n):
如果n%2==0:
返回错误
对于范围(3,int(math.sqrt(n))+1,2)内的i:
如果n%i==0:
返回错误
返回真值
def prime_计数器(n):
结果=[2]
而len(结果)
这将打印[2,3,3,3,3]。为什么不增加i并计算列表中的新数字?为什么它一直添加3?摆脱while循环,而是测试每个新发现的素数的
结果的长度:
def prime_counter(n):
result = [2]
for i in range(3, sys.maxsize, 2):
if is_prime(i):
result.append(i)
if len(result) == n: return result
每当break
语句找到第一个素数(3)时,它就会退出函数prime\u计数器中的for
循环。然后它从头开始重新启动for
循环,从数字3开始,它再次发现该数字是素数
例如,您需要使用一个while
循环并自己递增候选变量,然后在找到足够的素数时中断循环。您的中断语句似乎就是问题所在。在for循环的第一个循环中,设置i=3,确认i小于sys.maxsize,然后检查i是否为素数。是的,所以我们做if语句的主体。它将i附加到结果集中,然后中断for循环。注意,我们从未回到for循环的顶部,在那里我将增加2。我们3点离开。在中断for循环之后,我们检查while语句的条件,并确认结果集的长度仍然小于n,因此我们重新开始for循环,从i开始,从3开始,检查3是否小于sys.maxsize,等等。您永远不会考虑增加i
与双循环不同,您应该只使用for循环,在每次成功追加后,检查结果集的新长度是否等于n,如果是,则中断循环。完全摆脱while循环
祝你好运 你从不增加i
,你只会打破循环。你应该加一个计数器somewhere@BillLynch-谢谢你的编辑。我刚才注意到了,但你在我还没来得及修好之前就修好了。