根据 python 中的先前函数打印素数
Printing out prime numbers based on a previous function in python
我在 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) 函数收到的输出是:
Expected output: [2, 3, 5, 7]
My output: (array([2, 3]), array([1, 1]))
任何建议将不胜感激。
return 立即退出该函数并为您提供此时的值。
举个例子,
def f():
for i in (1, 2, 3):
return i
print(f())
这只打印 1。
你需要return一个你想要的东西的元组,例如
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)
你的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])
,其中 [=16] =] 也是未定义的。如果我们进一步接受全局 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
的结果,并且只有 returns 素数:(其中 mask[i] == True
)
结果:[2, 3, 5, 7]
我在 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) 函数收到的输出是:
Expected output: [2, 3, 5, 7]
My output: (array([2, 3]), array([1, 1]))
任何建议将不胜感激。
return 立即退出该函数并为您提供此时的值。
举个例子,
def f():
for i in (1, 2, 3):
return i
print(f())
这只打印 1。
你需要return一个你想要的东西的元组,例如
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)
你的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])
,其中 [=16] =] 也是未定义的。如果我们进一步接受全局 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
的结果,并且只有 returns 素数:(其中 mask[i] == True
)
结果:[2, 3, 5, 7]