Если вы не хотите печатать None
, когда вы получите, что вернулся из вашей функции, вам необходимо изменить код печати, а не код функции. Используйте что-то вроде:
p = isprime(x)
if p is not None:
print(p)
Но ваша isprime
функции фактически не работает должным образом в любом случае. Она всегда будет возвращать None
для любого значения, чем 2 или 3.
Это происходит потому, что петля for
будет работать только один итерацию, потому что вы всегда поражал break
заявление в блоке if
или else
он содержит. Вы не хотите, чтобы номер break
, если номер, который вы тестировали, не является делителем. На самом деле вам не нужно ничего делать в этом случае.
Просто используйте:
for i in range(2,n):
if n%i==0:
a=0
break
, без else
блока.
Обратите внимание, что вы могли бы упростить его немного с помощью return
в if
блоке, а не установка переменной флаг (который на самом деле должно быть дано более значимое имя, чем a
если вы намерены сохранить его).
Предлагается упрощенная версия того же алгоритма. Я добавил несколько улучшений, таких как остановка диапазона после int(sqrt(n))
и итерация только по нечетным значениям (так как в начале 2 используется специальный случай). Я также явно называя None
в качестве возвращаемого значения, чтобы понять, что это намеренно, чтобы вернуть это значение, когда n
является составным (голый return
делает это, похоже, как None
предполагается игнорироваться):
def isprime(n):
if n==1:
return None
if n==2:
return 2
for i in range(3,int(math.sqrt(n))+1,2):
if n%i==0:
return None
return n
'if a == 0: return 'not a prime'' Вы можете сделать что-то подобное, проблема в том, что вы пытаетесь распечатать что-то, но ничего не возвращаете, просто возвращая управление обратно вызывающей функции , – Feek