基于python中的前一个函数打印素数

2024-03-29 02:26:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我在python中有一个名为prime\u sieve(N)的函数,如果一个数字不是质数,这个函数会给它赋值0,如果它是质数,这个函数会给它赋值1,这叫做mask。此功能正常工作。问题出在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\u list(N)的函数中使用上面提到的函数来打印列表中的素数。素数列表(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\u list(N)函数收到的输出是:

Expected output: [2, 3, 5, 7]

My output: (array([2, 3]), array([1, 1]))

如有任何建议,我们将不胜感激。你知道吗


Tags: the函数代码infornpmaskprime
2条回答

return立即退出函数,并给出此时的值。你知道吗

举个例子

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

这只印了1张。你知道吗

你需要返回你想要的东西的元组,例如

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

print(f())

或者使用收益表,例如

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]),其中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]

相关问题 更多 >