Почему моя функция простых чисел не работает?

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

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».

Может кто-нибудь объяснить недостаток в этом коде?

Спасибо!


person Joanne    schedule 02.08.2016    source источник
comment
Ваш цикл всегда возвращает True или False в первой итерации (и ничего, если у него нет итераций). Вы должны возвращать True только в том случае, если весь цикл завершился без определения множителя.   -  person khelwood    schedule 02.08.2016


Ответы (1)


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

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

person Aurora0001    schedule 02.08.2016
comment
Возможно, стоит явно указать, что решением будет использование range(x). - person Holloway; 02.08.2016