Ошибка с дублированием и отсутствием первых двух простых чисел - PullRequest
0 голосов
/ 02 ноября 2019

Цель моего кода - создать список простых чисел из аргумента, который определяет конечное значение. Мой код не дает желаемого результата. Я полагаю, что это связано с моим вложенным циклом.

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 в список

Ответы [ 2 ]

1 голос
/ 02 ноября 2019

Это работает для меня. Просто сделайте отступ правильно и добавьте одну строку для удаления дубликатов.

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]

1 голос
/ 02 ноября 2019

Ваш отступ здесь неверный, его следует записать как:

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
...