Исправить код новичка, используемый для составления списка простых чисел - PullRequest
1 голос
/ 23 июня 2019

Код приводит к добавлению в список нечетных чисел, а не простых чисел. Если нечетное число не делится на 3, то список сгенерирует конкретное число как минимум 3 раза:

for i in range(2,100):
    for x in range(2,i):
        if (i %x==0):
            break
        else:
            prime.append(i)
        print(prime)

Я ожидал создать один список простых чисел в диапазоне (2, 100). Однако фактический вывод:

...
[3, 5, 5, 5, 7, 7, 7, 7, 7, 9]
[3, 5, 5, 5, 7, 7, 7, 7, 7, 9, 11]
[3, 5, 5, 5, 7, 7, 7, 7, 7, 9, 11, 11]
...

Ответы [ 2 ]

2 голосов
/ 24 июня 2019

Это просто из-за двух ошибок отступа: одна в вашем операторе else;один на вашем print утверждении:

prime = []

for i in range(2, 100):
    for x in range(2, i):
        if i % x == 0:
            break
    else:  # no break
        prime.append(i)

print(prime)

В Python правильные отступы имеют значение.else в цикле for выполняется только в том случае, если цикл for не завершается с помощью оператора break.Как отмечает @ B.Go, это не эффективный генератор простых чисел, но он работает.

1 голос
/ 23 июня 2019

Это именно то, что вы написали в коде: каждый раз, когда число, скажем 7, не делится точно на x (для 2, 3, 4, 5, 6), вы добавляете число в список.
Вы должны добавить его один раз только после того, как for будет сделан.
И вам следует пропустить все четные делители, кроме 2, это будет намного быстрее.Чтобы сделать это, диапазон может увеличиться на 2, после того как вы проверили 2 вне этого ...

...