在Python中使用for循环定位素数

时间:2019-03-09 05:40:35

标签: python-3.x

因此,首先,我意识到有很多更容易的方法来获取质数列表,但是我只是在学习。我对很多这样的理解很差(如您将看到的),如果这是一个愚蠢的问题,我们感到抱歉。我正在尝试学习。

#make an empty list to store primes in
primes = list()

#make a variable to easily change the amount of numbers I test for primality
high_val = 15

#Allocate a range that I will test all numbers in for primality
for n in range(2, high_val):
#Within the previous for loop, start another for loop to test every integer against every 
#value inside the primes list
    for p in primes:
        if n % p == 0:
            print(%s is not prime" % n)
        else:
#If n is prime, I add it to the list and print that it is prime
            primes.append(n)
            print("%s is a prime" % n)

我不知道这些注释是否使阅读更难,但这是我的逻辑。该功能没有打印输出。所以我想,素数没有任何价值,我需要给它一些可以比较的东西。因此,我在第一行之后立即在开头添加了primes.append(2),并将范围更改为(3,high_val)...

如果我这样做,它最终会为每个素数数字打印大约5次,还有5条消息说不是素数。显然,如果有人知道我哪里出了问题和/或如何解决此问题,我将犯下很大的错误,对此将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:0)

问题是您缺少一些标志:每次将它与另一个数字进行比较时,如果该数字是质数,则您正在打印。您应该仅在遍历所有素数后才打印它。

关于此,请考虑使用all

primes = [2]
high_val = 15

for n in range(3, high_val, 2):
    if all(n % p == 0 for p in primes):
        print(f"{n} is prime")
        primes.append(n)
    else:
        print(f"{n} is not prime")

ps:我没有测试。