본문 바로가기
파이썬

파이썬 "for item in L"루프의 잘못된 구문

by º기록 2020. 9. 19.
반응형

나는 여기에 꽤 간단한 것을 놓치고 있다는 느낌이 들지만이 한 가지 기능에서 :

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

오류가 발생합니다.

    for item in L:
                 ^
SyntaxError: invalid syntax

완전성을 위해 전체 프로그램은 다음과 같습니다.

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()

Python 2.7.1을 사용하고 있습니다. for 루프 뒤에 세미콜론이 있습니다. primes (n) 함수가 작동합니다. 아마도 어리석은 느낌이 들지만이 잘못된 구문을 일으키는 원인을 파악할 수 없습니다.

 

해결 방법

 

이전 줄에 닫는 괄호가 없습니다.

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

줄 아래의 "중첩 개수"에서 어떻게 0에 도달하지 않는지 보십니까?

 

참조 페이지 https://stackoverflow.com/questions/8886730

 

 

반응형

댓글