python - 返回if语句为真时的值

0 投票
2 回答
10638 浏览
提问于 2025-04-16 12:41

我刚开始学习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

如果你想要在 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

这个代码会一直打印质数,直到你停止它。

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

编辑2: 根据@rmflow对问题的评论,修正了prime2的代码。

撰写回答