无法理解函数行为 - isprime()

时间:2016-02-10 07:49:20

标签: python function for-loop primes

我构建了两个函数。第一个(不重要但是相关的,因为它在第二个中被调用)告诉一个数字是否是素数:

def is_prime(i):
    if i == 1:
        print("prime")
    if i == 2:
        print("not prime")
    for d in range(2, i):
        if i % d != 0:
            d = d+1
            if d == i:
                print('prime')
                break
        if i % d == 0:
            print('not prime')
            break

我希望能够使此函数计算从1p的所有素数。 当我要求它将它追加到列表中时 - 它会单独返回一个空列表和所有值。

def prime_counting(p):
    list_of_primes = []
    for n in range (p+1):
        if is_prime(n) == "prime":
            list_of_primes.append(n)

Instead of putting it in the list- it maps them separately

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

(注意:我没有检查is_prime()功能的逻辑
代码中的明显错误是函数is_prime()没有return任何东西,只有print s。您希望它为return TrueFalse,具体取决于数字是否为素数。改变它这样做。

然后你可以检查:

if is_prime(n) == True:
    list_of_primes.append(n)

编辑:正如评论中所说的那样(正确),写一种更为“pythonic”的方式是:

if is_prime(n):
    list_of_primes.append(n)

由于is_prime()将返回TrueFalse(因此无需与它们进行比较)。

答案 1 :(得分:0)

您的代码中存在一些缺陷,但您要问的是:

您正在查看is_prime()

的返回值
if is_prime(n) == "prime":

is_prime()不包含任何返回语句。

这是一个稍微修改过的版本,实际上会从is_prime()返回一个值:

def is_prime(i):
    if i == 1:
        return "prime"
    if i == 2:
        return "not prime"

    for d in range(2, i):
        if i % d != 0:
            d = d + 1
            if d == i:
                return "prime"
        if i % d == 0:
            return "not prime"


def prime_counting(p):
    list_of_primes = []
    for n in range(p+1):
        if is_prime(n) == "prime":
            print("added %s" % n)
            list_of_primes.append(n)
    return list_of_primes


if __name__ == '__main__':
    print(prime_counting(3))

如果您改为返回布尔值return Truereturn False,则可以执行以下操作:

if is_prime(n):
   do_something()

甚至像这样使用“理解”:

prime_list = [n for n in range(1, p+1) if is_prime(n)]