Синтаксис for n in (a, b)
делает не цикл n
между значениями a, a+1, a+2, ..., b
, он буквально заставляет n
принимать значения a
, а затем b
в качестве синтаксиса (a, b)
определяет кортеж, через который вы перебираете.
Вы почти наверняка ищете функцию range()
, которая возвращает итерацию, которую вы можете перебрать в цикле for, чтобы n
принимала диапазон значений изa
до b
(не включая b
).
Итак:
for n in range(2, int(k / 2)):
обратите внимание, что мы также должны преобразовать результат в целое число с int()
так как диапазон не принимает числа с плавающей запятой (десятичные дроби)
Что касается выполнения основного теста, вы не хотите циклически проходить до половины числа, вам нужно толькоподняться до квадратного корня числа.Кроме того, всякий раз, когда вы найдете делитель, вы можете print('no')
и break
из цикла, но когда число не делит первичного кандидата, вы не можете print('yes')
, так как могут быть делители, которых у вас нет 'Т проверено еще.Таким образом, мы можем только print('yes')
, если закончим for-loop
, не выйдя из него раньше.Этого легче всего достичь с помощью функции:
def is_prime(k):
if k <= 1:
return False
for n in range(2, int(k ** 0.5) + 1):
if k % n == 0:
return False
return True
, и тогда мы видим, что она работает:
>>> is_prime(2)
True
>>> is_prime(3)
True
>>> is_prime(4)
False
>>> is_prime(5)
True
>>> is_prime(6)
False
>>> is_prime(7)
True
>>> is_prime(8)
False
>>> is_prime(9)
False
>>> is_prime(10)
False
>>> is_prime(11)
True