我是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
。有人可以帮帮我吗?谢谢。
答案 0 :(得分:1)
更贴近您的需求
代码:
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:
上,但您的True
和False
也被翻转了……您应该尝试使用print()
语句调试这些东西(我在其中留了一个例子),还使用了描述性变量名(而不是两次使用i
和非常有用的n
和m
...)。我认为您没有意识到,即使每次经历内循环时,您甚至都没有对相同的数字进行比较。