Моя функция is_prime не работает на 9, и я не знаю почему?

У меня проблема. Я пишу функцию is_prime , но всякий раз, когда я запускаю ее, она терпит неудачу на is_prime(9) , и я не понимаю, почему:

 def is_prime(x): if x < 2: ##because negative numbers, 0 and 1 are not prime## return False elif x == 2: return True else: for n in range(2, x): if x % n == 0: return False else: return True 

он возвращает True по какой-либо причине is_prime(9) ?

Это потому, что функция не проверяет все подходящие делители до тех пор, пока не вернется.

Вместо этого он рано выходит с помощью True если x не делится на 2, что не то, что вы хотите для нечетных чисел (например, 9 не делится на 2 , но это не просто).

Вместо этого вы хотите попробовать все возможные делители от 2 до x-1 , а затем вернуться, если x не делится ни на один из них.

Для этого перепишите как таковой:

 def is_prime(x): if x < 2: ##because negative numbers, 0 and 1 are not prime## return False elif x == 2: return True else: for n in range(2, x): if x % n == 0: return False return True