Наиболее питонический способ, который я мог придумать, приведен ниже:
def isPrime(n):
return all(n % i for i in range(2, int(n ** 0.5) + 1)) and n > 1
for i in range(1, 20):
print(isPrime(i))
Объяснение:
все гарантирует, что каждый элемент в данном выражении вернет True
n% i возвращает True
, если n! = 0 (допускаются даже отрицательные числа)
int(n ** 0.5)
эквивалентноsqrt(n)
и, поскольку range
всегда возвращает числа до n - 1, вы должны добавить 1
n > 1
, чтобы убедиться, что n
не равно 1
Проблема в вашем коде заключается в том, что ваш i = i + 1
находится в неверной области
Ваша программа проверяет, является ли (n/i).is_integer()
, который возвращает False
, поскольку n / 2, не является целым числом
Улучшение вашего кода:
Вместо (n/i).is_integer()
вы можете использовать n % i == 0
, который возвращает остаток, равный 0
Далее вы должны поставить i = i + 1
во внешней области видимости
И лично я никогда не был фанатом i = i + 1
.Используйте i += 1
Я думаю, что лучше всего использовать код, который я показал выше.
Надеюсь, это поможет!
Редактировать:
Вы можете напечатать 'Prime' или 'Not Prime' следующим образом:
def isPrime(n):
print('Prime' if all(n % i for i in range(2, int(n ** 0.5) + 1))
and n > 1 else 'Not Prime')
for i in range(1, 20):
isPrime(i)