重复和缺少前两个质数的错误

Error with Duplicate and Missing First Two Prime numbers

我的代码的目的是根据确定最终值的参数创建素数列表。我的代码无法产生预期的结果。我相信这与我的嵌套 for 循环有关。

def prime(num):
  primes = [2,3]

  for possible_prime in range(2,num+1):
    isPrime = True
    for number in range(2, int(possible_prime**0.5) +1):
      if possible_prime%number == 0:
        isPrime = False
        break
      if isPrime:
        primes.append(possible_prime)

  return primes

结果:

prime(60)
[2, 3, 5, 7, 9, 11, 11, 13, 13, 15, 17, 17, 17, 19, 19, 19, 21, 23, 23, 23, 25, 25, 25, 27, 29, 29, 29, 29, 31, 31, 31, 31, 33, 35, 35, 35, 37, 37, 37, 37, 37, 39, 41, 41, 41, 41, 41, 43, 43, 43, 43, 43, 45, 47, 47, 47, 47, 47, 49, 49, 49, 49, 49, 51, 53, 53, 53, 53, 53, 53, 55, 55, 55, 57, 59, 59, 59, 59, 59, 59]

我收到重复项,我必须将 2 和 3 硬编码到列表中

你这里的缩进有误 应该写成:

def prime(num):
   primes = []

   for possible_prime in range(2,num+1):
       isPrime = True
       for number in range(2, int(possible_prime**0.5) +1):
           if possible_prime%number == 0:
             isPrime = False
             break
       # Notice this indentation change
       if isPrime:
           primes.append(possible_prime)
    return primes

对我有用。适当缩进并添加一行以删除重复项。

def prime(num):
    primes = [2,3]

    for possible_prime in range(2,num+1):
        isPrime = True
        for number in range(2, int(possible_prime**0.5) +1):
             if possible_prime%number == 0:
                 isPrime = False
                 break
        if isPrime:
             if possible_prime not in primes: # add this line
                  primes.append(possible_prime)

    return primes

print(prime(60))

Out[58]: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59]