我一直在尝试用Python制作素数生成器,基本上将this Scratch项目移植到Python术语中,然后将素数写入文本文档。
出于某种原因,它不起作用,我无法弄清楚为什么,因为它只是写出数字。
def primenumbers():
j = 2
f = open("primes.txt", "w")
primes = []
notprimes = []
ask = input("how many primes? ")
while len(primes) < int(ask):
k = 2
while not(k==j) or not(j%k==0):
k = k + 1
if k == j:
primes.append(j)
f.write(str(j)+"\n")
else:
notprimes.append(j)
# if len(primes)%1000 == 0:
# print("There have been " + str(len(primes)) + " primes counted so far")
j = j + 1
print("Primes written to file 'primes.txt', " + str(len(primes)) + " written")
f.close
return(" ")
因此,程序会询问用户应该生成多少素数,然后它应该从k = 2重复到j = j + 1,直到达到素数。
另外,如果可能的话,我希望注释掉的IF语句能够工作,因为当它被包含在内时,它会多次重复它的素数。 编辑:添加运行时发生的事情
how many primes? 1500
There have been 1000 primes counted so far
There have been 1000 primes counted so far
There have been 1000 primes counted so far
There have been 1000 primes counted so far
There have been 1000 primes counted so far
There have been 1000 primes counted so far
There have been 1000 primes counted so far
There have been 1000 primes counted so far
Primes written to file 'primes.txt', 1500 written
答案 0 :(得分:2)
使用while not(k==j) and not(j%k==0):
代替while not(k==j) or not(j%k==0):
然后它会正常工作。
我希望这是您正在寻找的代码:
def primenumbers():
j = 2
chk = 1
f = open("primes.txt", "w")
primes = []
notprimes = []
ask = input("how many primes? ")
while len(primes) < int(ask):
k = 2
while not(k==j) and not(j%k==0):
k = k + 1
if k == j:
primes.append(j)
f.write(str(j)+"\n")
else:
notprimes.append(j)
if len(primes) >= 1000*chk:
chk = chk + 1
print("There have been " + str(len(primes)) + " primes counted so far")
j = j + 1
print("Primes written to file 'primes.txt', " + str(len(primes)) + " written")
f.close
return(" ")