【问题标题】:Want a list of prime numbers returned from my function but only getting the first value? [duplicate]想要从我的函数返回的素数列表但只获得第一个值? [复制]
【发布时间】:2020-01-18 19:20:19
【问题描述】:

我有以下功能:

def prime(number):
    for num in range(1,number):
        if num > 1:
            for i in range (2, num):
                if (num%i == 0):
                    return("not a prime")
            else:
                return(num)

print(prime(9))

输出:2

请解释我在哪里做错了,或者如何获得任何输入范围内所有素数的列表,例如:-9 或 100 或 300。

【问题讨论】:

  • 请记住,当您到达return 语句时,函数将终止。
  • @lmiguelvargasf 有什么方法可以让我的列表作为输出

标签: python python-3.x list function


【解决方案1】:

问题是当你到达return 语句时,函数执行终止,所以你只会得到第一个素数。考虑创建一个列表,您将在其中附加您的素数,如下所示:

def prime(number):
    primes = []
    for num in range(1, number + 1):
        if num > 1:
            for i in range (2, num):
                if (num % i == 0):
                    break
            else:
                primes.append(num)
    return primes

这将为您提供从 2 到 number 的素数。希望对您有所帮助。

按照@jpp的建议,你也可以使用yield,如下:

def prime(number):
    for num in range(1,number):
        if num > 1:
            for i in range (2, num):
                if (num%i == 0):
                    break
            else:
                yield num

for num in prime(20):
    print(num)

【讨论】:

  • @SameerKumarPandey,请记住,这不是一个有效的算法。
  • @SameerKumarPandey,不客气。我希望你也可以验证/支持我的答案。
  • 为什么它不是一个有效的算法..请解释一下?请给出更好的代码?
  • 或者直接将原代码中的return替换为yield,然后在生成器上使用next。
  • @SameerKumarPandey,我刚刚更新了我的答案。添加您可以使用 yield 的方式,然后使用 for 循环,该循环在每次生成数字时都会在底层调用 next。
猜你喜欢
  • 1970-01-01
  • 2020-11-20
  • 1970-01-01
  • 2022-08-12
  • 2017-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多