is_prime并定义两个函数

时间:2019-03-05 00:08:42

标签: python jupyter-notebook

我是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。有人可以帮帮我吗?谢谢。

2 个答案:

答案 0 :(得分:1)

更贴近您的需求

  • 跳过偶数(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]

答案 1 :(得分:0)

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 ...)。我认为您没有意识到,即使每次经历内循环时,您甚至都没有对相同的数字进行比较。