Я написал программу на Python для генерации простых чисел, вот программа

def genPrimes(n):
    primes = [2]  # primes generated so far
    last = 3  # last number tried
    while last <= n:        
        for p in primes:
            if last % p == 0 and math.sqrt(p) <= last:
                break
        else:
            primes.append(last)
        last += 2
    return primes

http://codepad.org/d33tsQyT

Эта программа дает правильный ответ. Если вы видите отступ для оператора else :, он неправильно расположен. если я пытаюсь поместить оператор else в блок-интерпретатор if, показывает ошибку памяти. Может кто-нибудь сказать, почему это происходит.

Заранее спасибо Марис

2
Maries 24 Янв 2013 в 05:01

2 ответа

Лучший ответ

else фактически присоединен к циклу for и выполняется, если программа не выходит из цикла. В вашем случае он выполняется, если ни одно из простых чисел не делится на число, поэтому число простое и добавляется в список.

Смотрите также раздел документация.

4
Volatility 24 Янв 2013 в 01:03

Он не размещен неправильно, python предполагает, что вы используете цикл for-else.

Из документов. :

При использовании с циклом предложение else имеет больше общего с предложением else оператора try, чем с выражением if: предложение else оператора try выполняется, когда не возникает исключение, а предложение else цикла выполняется, когда не происходит прерывания. ,

2
Ashwini Chaudhary 24 Янв 2013 в 01:08