【问题标题】:Basic Prime Number generator基本素数生成器
【发布时间】:2014-01-31 18:51:46
【问题描述】:

我一直在尝试用 Python 制作一个素数生成器,基本上是将 thisScratch 项目移植到 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

【问题讨论】:

    标签: python primes mit-scratch


    【解决方案1】:

    使用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(" ")
    

    【讨论】:

    • 这行得通。它是否也适用于注释掉的部分?编辑:不,它没有。无论如何,谢谢。
    • 如果您想打印找到了哪个素数,那么您可以在将素数写入文本文件之前或之后在“if j==k:”的情况下打印它。如果有帮助,请采纳答案
    • 我在评论部分寻找的是终端每 1000 个素数生成多少个素数,否则终端上什么都不会发生。当素数为 1500 时,有 8 个“到目前为止已经计数了 1000 个素数”。
    猜你喜欢
    • 2015-06-30
    • 2021-08-30
    • 1970-01-01
    • 1970-01-01
    • 2013-03-20
    • 2019-09-06
    • 2014-01-11
    • 1970-01-01
    • 2014-10-31
    相关资源
    最近更新 更多