Есть две проблемы с вашим кодом прямо сейчас.
Сначала необходимо заменить []
на ()
, поскольку append
- это функция.
Во-вторых, в вашей текущей реализации вы получите TypeError: 'bool' object is not iterable
при проверке all()
.Вы можете просто сделать all(remainder)
, как предложено @ShadowRanger.
i = 3
primes = [2]
remainder = []
while i <= 20:
for x in primes:
remainder.append(i%x)
if all(remainder) == True:
primes.append(i)
i += 1
remainder.clear()
print(primes)
# [2, 3, 5, 7, 11, 13, 17, 19]
Другая альтернатива, как предложено снова в комментариях, это использовать
all(rem != 0 for rem in remainder)
, где выиспользуйте проверку цикла for для каждого элемента в вашем списке remainder
.rem != 0
даст вам True / False в зависимости от того, выполнено условие или нет.all
просто проверит, все ли записи истинны, и в этом случае он вернет True
иначе False
, если хотя бы одна запись будет ложной.
Если вы хотите почувствовать, как all()
здесь работает, поставьте оператор print со следующим выводом.Как видите, выходное значение равно False
только для тех случаев, когда существует даже один 0 и True
, где нет 0.
print (remainder, all(remainder))
[1] True
[0, 1] False
[1, 2] True
[0, 0, 1] False
[1, 1, 2] True
[0, 2, 3, 1] False
[1, 0, 4, 2] False
[0, 1, 0, 3] False
[1, 2, 1, 4] True
[0, 0, 2, 5, 1] False
[1, 1, 3, 6, 2] True
[0, 2, 4, 0, 3, 1] False
[1, 0, 0, 1, 4, 2] False
[0, 1, 1, 2, 5, 3] False
[1, 2, 2, 3, 6, 4] True
[0, 0, 3, 4, 7, 5, 1] False
[1, 1, 4, 5, 8, 6, 2] True
[0, 2, 0, 6, 9, 7, 3, 1] False