是素数,定义了两个函数

2024-04-20 08:15:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我对Python还不熟悉。我有一个问题问如下

编写lst_prime()函数:

  • 将边界作为输入,它是正整数
  • 返回小于或等于界限的素数列表。你知道吗

我应该匹配的输出答案是:

>>> lst_prime(0)
[]

>>> lst_prime(6)
[2, 3, 5]

>>> lst_prime(11)
[2, 3, 5, 7, 11]

这是我目前的代码。你知道吗

def lst_prime(n):
    def is_prime(m):
        for i in range(2, m):
            if n % i == 0:
                return True 
        return False 
    for i in range(n-1, 1, -1):
        if is_prime(i) == True: 
            return i

它没有给我正确的输出,它给我一个错误消息,说is_prime没有定义。有人能帮我吗?非常感谢。你知道吗


Tags: 函数intrueforreturnifisdef
2条回答

更接近你所追求的:

  • 跳过偶数(2除外)
  • 只对已经发现的素数执行mod操作

代码:

def is_prime(x, primes):
    for p in primes:
        if (x % p) == 0:
            return False
    return True


def lst_prime(n):
     primes = []
     if (n < 2):
        return primes
     primes = [2]
     for i in range(3, n+1, 2):  # n+1 so that "n" can be evaluated as prime as well
         if is_prime(i, primes):
            primes.append(i)
     return primes

测试:

>>> lst_prime(99)
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
def lst_prime(prime_number_to_make_list_for):
    def is_prime(m):
        for j in range(2, m):
            print("{} %  {}= {}".format(m, j, m % j))
            if m % j == 0:
                return False
        return True
    prime_list = []
    for i in range(0, prime_number_to_make_list_for + 1):
        if is_prime(i):
            prime_list.append(i)
    return prime_list

my_list = lst_prime(15)
print(my_list)

对我来说,这个输出:

[0, 1, 2, 3, 5, 7, 11, 13]

问题主要出在你的if n % i == 0:我想,但是你的TrueFalse也有问题……你应该试着用print()语句来调试这些东西(我把我的一个例子放在那里作为一个如何调试的例子),还可以用描述性变量名(而不是i两次,以及非常有用的nm……)。我想你没有意识到你每次通过你的内部循环都在和同一个数字做比较。你知道吗

相关问题 更多 >