python - 返回if语句为true的值

时间:2011-02-28 15:59:20

标签: python

我开始使用Python并对以下代码提出疑问:

def prime2(n):
    n = eval(input("What is your number? "))
    for i in range(2, int(math.sqrt(n)) + 1):

        if n % i == 0:
            return False
        else:
            return True

因此,当返回True时,n为素数。现在有没有办法列出if语句为真的n的所有值?

2 个答案:

答案 0 :(得分:4)

由于有无数的素数,没有。但是,您可以列出特定时间间隔内的所有素数:

foo = [x for x in range(1000) if prime2(x)]

这将为您提供0到1000区间内所有素数的列表。

编辑:为什么你的n作为你的功能的参数,然后把它作为用户的输入读取?这会丢弃传递给函数的参数。来自用户的输入应该在该功能之外。脚本可能如下所示:

def prime2(n):
    for i in range(2, int(math.sqrt(n)) + 1):

        if n % i == 0:
            return False

    return True

max = int(input("What is your number? "))
print [x for x in range(max) if prime2(x)]

Edit2 :根据@ rmflow对该问题的评论修正了prime2的代码。

答案 1 :(得分:0)

如果在n为素数时需要所有值的列表,则需要素数生成器。基于prime2函数的示例(虽然不是效果):

import math

def prime2(n):
    for i in range(2, int(math.sqrt(n)) + 1):
        if n % i == 0:
            return False
    return True

def prime_generator():
    n = 1
    while True:
        n += 2
        if prime2(n):
            yield n

primes = prime_generator()

for prime in primes:
    print prime

将打印素数直至中断