2016-08-02 3 views
0

Я новичок в программировании, и я сталкиваюсь с проблемой при попытке написать программу в поиске простого номера. Вот мой код:Почему моя функция простого числа не работает?

def is_prime(x): 
    if x < 2: 
     return False 
    elif x == 2: 
     return True 
    else: 
     for n in range (2,x-1): 
      if x % n == 0: 
       return False 
      else: 
       return True 

я получил ошибку, указывающую «Ваша функция не будет работать на is_prime (3) Она возвращает None, когда он должен возвращать True.»

Может кто-то объяснить причину этого кода?

Спасибо!

+1

Ваша петля всегда возвращает 'True' или' False' на первой итерации (и ничего, если она не имеет итераций). Вы должны возвращать 'True', если * целая петля * закончила, не найдя фактора. – khelwood

ответ

3

range() имеет exclusive upper bound, поэтому он пытается получить диапазон между 2 и 2 (3 - 1), который не является элементом. Поскольку вы не можете перебирать ничто, цикл for никогда не запускается, поэтому возвращается None (это возвращаемый тип функции по умолчанию, если ни один не указан).

Решение вашей проблемы будет состоять в том, чтобы использовать range(2, x), а не range(2, x - 1). Вы обнаружите, что у вас будут проблемы при x> 3, хотя, поскольку, как сказал @khelwood, вы возвращаете True или False сразу после проверки первого значения. Вместо этого возвращайте только True после проверки всего значений в диапазоне.

+1

Не стоит явно указывать, что решение будет заключаться в использовании 'range (x)'. – Holloway

+0

Да, это хороший момент. – Aurora0001

0
def is_prime(x): 
    if x < 2: 
     return False 
    elif x == 2: 
     return True 
    else: 
     for n in range (2,x): # range function will iterate till x-1 
      if x % n == 0: 
       return False 
     # return true only at the end after making sure it is not divisible by any number in the middle 
     return True