1

我一直在尝试用 Python 制作一个素数生成器,基本上将这个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
4

1 回答 1

2

while not(k==j) and not(j%k==0):代替Then使用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(" ")
于 2014-01-31T19:10:14.517 回答