python-返回if语句为true的值

python-返回if语句为true的值,python,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语

我从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
的所有值?

因为素数的数量是无限的,没有。但是,您可以在一定的时间间隔内列出所有素数:

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
的代码。

因为素数的数量是无限的,所以没有。但是,您可以在一定的时间间隔内列出所有素数:

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
的代码。

如果当
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

将打印素数直到中断

如果在
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

将打印素数直到中断

您不必计算
input()
,它会自动计算为python值。请注意-您应该在
外部为
返回True,否则循环没有意义您不必计算
input()
,它会自动计算为python值。请注意,对于,您应该在
之外返回True,否则循环将毫无意义