Q:

Function is_prime - Error

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

A:

Let's see what happens when you enter -2:

range(2,-2) is empty, so the for loop never runs.
Therefore, lst is still [] after the loop.
Therefore, 'False' in lst is False
Therefore, return True is executed.

A:

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)

