Функция is_prime - Ошибка

Это вопрос с codeacademy.com, где я изучаю Python. Поэтому я хочу определить функцию, которая проверяет, является ли число простым. Если это так, верните True. Если это не так, верните False.

Вот мой код:

def is_prime(x):
    lst = []       # empty list to put strings 'False' and 'True'

    for i in range(2,x): # starting at 2 and not including x (number 1 is a divisor of all numbers

        if x <= 2:           # [1] see bellow the explanation
            lst.append('False')
            break

        elif x % i == 0: # if x is divisible by i(number between 2 and not including x)
            lst.append('False')
            break        # break, because we already know x is not prime

        elif x % i > 0:
            lst.append('True') # x is not divisible by i

    if 'False' in lst:
        return False     #  x is not prime - return False

    else:
        return True  # 'True' is in lst, so x is prime - return True

print is_prime(-2) # [2] I get an error here. See below

[1] - Я сделал это условие, потому что в кодекадемии говорится:    "Подсказка   Помните: все числа меньше 2 не являются простыми числами!"

[2] - Когда я запускаю, например, "print is_prime (11)" или "is_prime (6)", он работает нормально. Поэтому я отправляю ответ, но codeacademy его не принимает. В нем говорится: "Функция is_prime (-2) перестает работать, она возвращает True, когда она должна возвращать False".

Ответ 1

Посмотрите, что произойдет, когда вы введете -2:

  • range(2,-2) пуст, поэтому цикл for никогда не запускается.
  • Следовательно, lst по-прежнему [] после цикла.
  • Следовательно, 'False' in lst есть False
  • Следовательно, выполняется return True.

Ответ 2

Когда x есть -2, range(2, x) создаст пустой список.

print range(2, -2) # will print []

Таким образом, цикл и условия if внутри цикла не будут выполнены. Последнее, если условие будет проверено, и 'False' не находится в lst. Таким образом, он возвращает True.

Вы можете написать ту же программу, что и здесь.

def is_prime(x):
    if x < 2:
        return False
    prime_flag = True
    for i in range(2,x):
        if x % i == 0:
            prime_flag = False
            break
    return prime_flag

print is_prime(-2)

Ответ 3

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