【发布时间】:2020-07-11 23:12:47
【问题描述】:
请参阅下面的代码。我不断收到错误代码,我也不明白它的含义。我可以在哪里查看代码?
def list_true(n):
return [False for x in range(2)] + [x for x in range (2, n+1)]
assert len(list_true(20)) == 21
assert list_true(20)[0] is False
assert list_true(20)[1] is False
def mark_false(bool_list, p):
mark_false = []
for x in bool_list:
if x/p == 1:
mark_false.append(True)
elif x % p == 0:
mark_false.append(False)
else:
mark_false.append(True)
return mark_false
assert mark_false(list_true(6), 2) == [False, False, True, True, False, True, False]
def find_next(bool_list, p):
x = 0
cleared = False
for bool in bool_list:
if cleared:
if bool:
return x
if x == p and bool:
cleared = True
x += 1
return None
assert find_next([True, True, True, True], 2) == 3
assert find_next([True, True, True, False], 2) is None
def prime_from_list(bool_list):
y = [x for x, i in enumerate(bool_list) if i]
prime_from_list = []
for element in bool_list:
if element == True:
return y
return prime_from_list
assert prime_from_list([False, False, True, True, False]) == [2, 3]
def sieve(n):
bool_list = list_true(n)
p = 2
while p is not None:
bool_list = mark_false(bool_list, p)
p = find_next(bool_list, p)
return prime_from_list(bool_list)
然后我在下面的代码之后收到一条错误消息。
assert sieve(1000) == get_primes(0, 1000)
--------------------------------------------------------------------------
AssertionError Traceback (most recent call last)
<ipython-input-50-c49169fabbae> in <module>()
----> 1 assert sieve(1000) == get_primes(0, 1000)
AssertionError:
为什么我会收到错误消息,有什么方法可以修改它?
【问题讨论】:
-
您的断言不起作用。如果一个断言不能正确断言,那么你就会得到那个错误。你也很模糊。请不要在这里含糊其辞,人会欺负你
-
sieve(1000) 不等于 get_primes(0,1000),这是什么意思...也许检查一些较小的值,如
print(sieve(5),"==",get_primes(0,5))
标签: python primes sieve-of-eratosthenes