найти функцию простых чисел - PullRequest
2 голосов
/ 01 декабря 2011

У меня есть функция:

def containsNoDivisor(n, ps):
    '''n is an integer and ps is a list of integers. Returns True if
    and only if there is no integer in ps that divides n.    '''
    for p in ps:
        if n % p == 0:
            return False
    print True

Затем мне нужно создать другую функцию, которая вычисляет список простых чисел

def findPrimes(n):
    primes = [2]
    for i in range(3,n):
        if containsNoDivisor(i, primes):
            primes.append(i)
    return primes

Но оно возвращает истину вместо простых чисел?

Ответы [ 3 ]

4 голосов
/ 01 декабря 2011

Похоже, вы печатаете True вместо того, чтобы возвращать его в функции containsNoDivisor.Это должно выглядеть следующим образом:

def containsNoDivisor(n, ps):
    '''n is an integer and ps is a list of integers. Returns True if
    and only if there is no integer in ps that divides n.    '''
    for p in ps:
        if n % p == 0:
            return False
    return True

Оператор print просто выводит значение на консоль - если вы пытаетесь выполнить каждую функцию в интерактивной оболочке, сделать ошибку легко.return фактически примет значение и передаст его обратно тому, кто его вызвал, что позволит использовать данные вне функции, которая его создала или обработала.

1 голос
/ 01 декабря 2011
def containsNoDivisor(n, ps):
    '''n is an integer and ps is a list of integers. Returns True if
    and only if there is no integer in ps that divides n.    '''
    for p in ps:
        if n % p == 0:
            return False
    print True
    ^^^^^
 should be return
0 голосов
/ 02 декабря 2011

Вы тестируете каждое число от 3 до n. Вам не нужно проверять четные числа, так как все четные числа> 2 являются составными. Попробуйте шаг 2, а не 1: 3, 5, 7, 9, 11, ...

...