这是我做的发电机。我应该能产生20000个素数。它应该生成作为参数提供给它的素数。但是,它最多只能执行11次并停止D:。有人能解释一下这里出了什么问题吗?你知道吗
def find_primes(limit):
prime_holder = [2, 3, 5 ,7]
divided_pass = 0
for i in range(11, 20000):
for j in range(0, len(prime_holder)):
if i%prime_holder[j] != 0:
divided_pass += 1
if divided_pass == len(prime_holder):
prime_holder.append(i)
divided_pass = 0
if len(prime_holder)-1 == limit:
break
return prime_holder
my_primes = find_primes(50)
for x in my_primes:
print x;
raw_input()
您应该在每个循环中清除除以\u pass的值:
对于每个新的
i
,需要将divided_pass
设置回0
。你知道吗p.S-列表在Python中是可编辑的,因此不需要执行
for j in range(len(...))
,只需执行for j in prime_holder: if i % j != 0
。在给定的范围内寻找素数有更好的实现(你应该看看那些)。你知道吗也可以使用
for-else
构造,如果没有遇到break
,则执行else
部分。现在你的代码被简化为。你知道吗相关问题 更多 >
编程相关推荐