【问题标题】:Printing out prime numbers based on a previous function in python根据python中的前一个函数打印出素数
【发布时间】:2017-03-07 20:18:39
【问题描述】:

我在 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]))

任何建议都将受到高度赞赏。

【问题讨论】:

  • 我的 numpy 版本没有零,但它有零?

标签: python arrays list primes


【解决方案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 也会为 true,然后调用 prime_sieve(numbers[2]),其中 numbers 也未定义。如果我们进一步接受全局numbers,这给了我们prime_sieve[3],不管他们输入了什么NN >= 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)
    

    【讨论】:

      猜你喜欢
      • 2013-12-06
      • 1970-01-01
      • 2012-09-25
      • 1970-01-01
      • 1970-01-01
      • 2021-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多