Invalid syntax in "for item in L" loop
Question: I have a feeling I'm missing something pretty simple here but, in this one
function:

    
    
    def triplets(perimeter):
    
        triplets, n, a, b, c = 0  #number of triplets, a, b, c, sides of a triangle, n is used to calculate a triple
        L = primes(int(math.sqrt(perimeter)) #list of primes to divide the perimeter
    
        for item in L: #iterate through the list of primes
            if perimeter % item == 0: #check if a prime divides the perimeter
                n = perimeter / item
                a = n**2 - (n+1)**2 #http://en.wikipedia.org/wiki/Pythagorean_triple
                b = 2n*(n+1)
                c = n**2 + n**2
                if a+b+c == perimeter: #check if it adds up to the perimeter of the triangle
                    triplets = triplets + 1
    
        return triplets
    

I am getting the error:

    
    
        for item in L:
                     ^
    SyntaxError: invalid syntax
    

For completeness my entire program looks like this:

    
    
    import math
    
    def primes(n): #get a list of primes below a number
        if n==2: return [2]
        elif n<2: return []
        s=range(3,n+1,2)
        mroot = n ** 0.5
        half=(n+1)/2-1
        i=0
        m=3
        while m <= mroot:
            if s[i]:
                j=(m*m-3)/2
                s[j]=0
                while j<half:
                    s[j]=0
                    j+=m
            i=i+1
            m=2*i+3
        return [2]+[x for x in s if x]
    
    def triplets(perimeter):
    
        triplets, n, a, b, c = 0  #number of triplets, a, b, c, sides of a triangle, n is used to calculate a triple
        L = primes(int(math.sqrt(perimeter)) #list of primes to divide the perimeter
    
        for item in L: #iterate through the list of primes
            if perimeter % item == 0: #check if a prime divides the perimeter
                n = perimeter / item
                a = n**2 - (n+1)**2 #http://en.wikipedia.org/wiki/Pythagorean_triple
                b = 2n*(n+1)
                c = n**2 + n**2
                if a+b+c == perimeter: #check if it adds up to the perimeter of the triangle
                    triplets = triplets + 1
    
        return triplets
    
    def solve():
        best = 0
        perimeter = 0
        for i in range(1, 1000):
            if triplets(i) > best:
                best = triplets(i)
                perimeter = i
        return perimeter
    
    print solve()
    

I am using Python 2.7.1. I have a semicolon after the for loop, the
`primes(n)` function works, I have a feeling it is probably something stupid
but I can't figure out what it is that is causing this invalid syntax.


Answer: You are missing a closing parenthesis on the line before:

    
    
          L = primes(int(math.sqrt(perimeter)) #list of primes to divide the perimeter
    #                ^   ^         ^         ^^
    #nesting count   1   2         3         21
    

See how we don't reach 0 in the "nesting count" below the line?

