Функция 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