我在python中有一个名为prime_sieve(N)的函数,如果它不是素数,则此函数将0分配给数字,如果它是素数,则此函数分配1 - 它被称为掩码。此功能正常工作。问题出现在prime_sieve(N)代码下面的第二个函数中,代码是:
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]
我的输出:(array([2,3]),array([1,1]))
任何建议都将受到高度赞赏。
答案 0 :(得分: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])
{{1}也是未定义的。如果我们进一步接受全球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]
答案 1 :(得分:-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)