В настоящее время я пытаюсь написать скрипт на python, имитирующий Сито Эратосфена. Проблема в том, что профессор требует, чтобы мы использовали math.sqrt и math.ceil, а затем запустили следующие тесты:
assert sieve(2) == [2]
assert sieve(3) == [2, 3]
assert sieve(4) == [2, 3]
assert sieve(5) == [2, 3, 5]
и
try:
sieve(0)
except ValueError:
pass
else:
raise AssertionError("Did not raise")
try:
sieve(-4)
except ValueError:
pass
else:
raise AssertionError("Did not raise")
Я смог заставить работать код только при написании скрипта без использования sqrt или ceil, но без них тест Try / Except не пройдет, потому что только получение квадратного корня из значений 0 и -4 будет бросить ValueError ........ Есть предложения?
С чем я сейчас работаю:
def sieve(n):
myList = []
primeList = []
for i in range(2, n+1):
if i not in myList:
primeList.append(i)
for j in range(i*i, n+1, i):
myList.append(j)
return primeList
print(sieve(-4))
Затем возвращается
[]
вместо ValueError.
EDIT:
Нам также не разрешается жестко кодировать подобные ошибки.
Как и требовалось, вот другой скрипт, с которым я возился, но он по-прежнему не выдает ошибку при вводе нуля и не проходит тесты подтверждения
def sieve3(n):
marked = {}
primes = []
for i in range(2, int(ceil(sqrt(n)))):
if not marked.get(i):
for x in range(i * i, n, i):
marked[x] = True
for i in range(2, n):
if not marked.get(i):
primes.append(i)
print(primes)
sieve3(100)