This is a question from codeacademy.com, where I am learning Python. So what I want is to define a function that checks if a number is prime. If it is, return True. If it isn't, return False.
Here is my code:
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] - I made this condition because in codeacademy it says: "Hint Remember: all numbers less than 2 are not prime numbers!"
[2] - When I run, for example, 'print is_prime(11)' or 'is_prime(6)' it works ok. So I submit the answer, but codeacademy doesn't accept it. It says: "Your function fails on is_prime(-2). It returns True when it should return False."
Let's see what happens when you enter -2
:
range(2,-2)
is empty, so the for
loop never runs.lst
is still []
after the loop.'False' in lst
is False
return True
is executed.When x
is -2
, range(2, x)
will produce an empty list.
print range(2, -2) # will print []
So, the loop and the if conditions inside the loop will not be executed. The last if condition will be checked and no 'False'
is in the lst
. So, it returns True
.
You can write the same program like this
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)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With