因此,首先,我意识到有很多更容易的方法来获取质数列表,但是我只是在学习。我对很多这样的理解很差(如您将看到的),如果这是一个愚蠢的问题,我们感到抱歉。我正在尝试学习。
#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条消息说不是素数。显然,如果有人知道我哪里出了问题和/或如何解决此问题,我将犯下很大的错误,对此将不胜感激。谢谢!
答案 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:我没有测试。