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

Can't understand function behavior - isprime()

我构造了两个函数。第一个(不重要但相关,因为它在第二个中被调用)判断一个数是否为质数:

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 的所有素数。 当我要求它将它附加到列表时 - 它 returns 一个空列表和单独的所有值。

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

我该如何解决?

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

那你可以查看:

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

编辑:如评论中(正确)所述,一种更 "pythonic" 的编写此类语句的方法是:

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

因为is_prime()会returnTrueFalse(所以没必要跟他们比较)。

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

您正在查看 is_prime() 的 return 值

if is_prime(n) == "prime":

is_prime() 不包含任何 return 语句。

这是一个稍微修改过的版本,实际上 return 是 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 布尔值 return Truereturn False 您将能够做到:

if is_prime(n):
   do_something()

甚至像这样使用 "comprehension":

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