2017-03-07 75 views
0

我在python中有一個名爲prime_sieve(N)的函數,如果該函數不是素數,則該函數將賦值0;如果是質數,則賦值1 - 它被稱爲面具。此功能正常工作。問題是在prime_sieve(N)的代碼下面的第2個功能和代碼是:在python中打印基於前一個函數的素數

import numpy as np 

def prime_sieve(N): 
    nums = np.arange(2, N + 2, 1) 
    mask = 1 + np.zeroes(N, dtype = int) 
    for n in nums: 
    for i in np.arange(2 * n - 2, N, n): 
     mask[i] = 0 

    return nums, mask 

numbers, mask = prime_sieve(8) 
print(numbers) #prints out the actual numbers starting at 2 
print(mask) #prints out the 0s and 1s assigned to the values if they are a prime or not. 

我必須用一個函數調用primes_list(N)的上述功能,只打印出的質數從列表中。對於primes_list(N)中的代碼是:

def primes_list(N): 

    for i in range (0, N, 1): 

    if mask[i] == 1: 
     return prime_sieve(numbers[i]) 

print(primes_list(8)) 

我從prime_sieve(N)函數接收的輸出是:

[2,3,4,5,6,7,8, 9]

[1,1,0,1,0,1,0,0]

我從primes_list接收的輸出(N)的功能是:

預期輸出:[2,3,5,7]

我的輸出:(陣列([2,3]),陣列([1,1]))

任何建議將受到高度讚賞。

+0

我numpy的版本已經沒有零,它有零? – Denziloe

回答

1

primes_list無厘頭:

def primes_list(N): 
    for i in range (0, N, 1): 
    if mask[i] == 1: 
     return prime_sieve(numbers[i]) 

mask沒有定義,即使您正在使用從早期的面具,這將是真正的在2,那麼它將調用prime_sieve(numbers[2])其中numbers也是未定義的。如果我們進一步接受全球numbers,那就給我們prime_sieve[3],不管他們放什麼N(其中N >= 3)。 prime_sieve[3]的結果是一個元組:([2, 3], [1, 1])

嘗試:

def primes_list(N): 
    nums, mask = prime_sieve(N) 
    return [nums[i] for i in range(len(nums)) if mask[i]] 

這需要的prime_sieve結果,只有返回,那裏是主要的數字:(其中mask[i] == True

結果:[2, 3, 5, 7]

-2

return立即退出該函數,併爲您提供該值的任何值。

嘗試例如,

def f(): 
    for i in (1, 2, 3): 
     return i 
print(f()) 

這只是打印1.

你需要或者返回你想要的東西,例如一個元組

def f(): 
    return (1, 2, 3) 

print(f()) 

或使用yield語句,例如,

def f(): 
    for i in (1, 2, 3): 
     yield i 

for thing in f(): 
    print(thing)