Dair - 1 year ago 72

Python 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)`

Answer Source

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?