2017-05-22 1 views
1

간단한 코드 블록을 얻을 수 없어서 누군가가 무엇이 잘못되었는지 알 수 있기를 바랍니다. 나는 장님 인 것 같아.ArcGIS 필드 계산기의 Python 구문 오류

1) 내 ArcGIS 속성 테이블에 도로 유형의 속도 제한을 나타내는 "SpeedLimit"라는 짧은 정수 필드를 새로 만듭니다.

2) 도로 유형은 동일한 테이블의 필드 "fclass"에있는 문자열입니다.

은 내가 SpeedLimit 필드에 대한 필드 계산기를 열고 다음 입력 :

사전 로직 스크립트 코드 :

def Speed(class): 
    if (class == ‘secondary’ or class == ‘tertiary’ or class == ‘trunk’ or class == ‘motorway’ or class == ‘primary’): 
     return 70 
    elif (class == ‘secondary_link’ or class == ‘tertiary_link’ or class == ‘trunk_link’ or class == ‘motorway_link’ or class == ‘primary_link’): 
     return 45 
    elif (class == ‘service’ or class == ‘track_grade1’ or class == ‘track_grade2’ or class == ‘track_grade3’ or class == ‘track_grade4’ or class == ‘track_grade5’): 
     return 15  
    else: 
     return 30 

SpeedLimit을 =

Speed(!fclass!) 

사람이 내가 '무엇을 발견 할 수 문법 오류를 잘못 받는다? 나는 짧고 간단한 코드를 실행에서 오류가 발생하고있다 : 코멘트에 응답

편집

def Speed(road): 
    if (road == 'secondary'): 
     return 70 
    else: 
     return 30 

enter image description here

** 대답은 ** 간단히 말해서 나는하지 않았다 "Python"라디오 버튼을 선택하십시오 ... 귀하의 도움에 감사드립니다.

+3

잘못된 인용 부호를 사용하고 있습니다. – timgeb

+0

변수 이름으로'class'를 사용할 수 없습니다. – user2357112

+0

변수 이름과 따옴표를 변경해도 내 문제가 완화되지 않습니다./ –

답변

1

당신은 아마이 원하는 :

def speed(aClass): 
    if (aClass == 'secondary' or aClass == 'tertiary' or aClass == 'trunk' or aClass == 'motorway' or aClass == 'primary'): 
     return 70 
    elif (aClass == 'secondary_link' or aClass == 'tertiary_link' or aClass == 'trunk_link' or aClass == 'motorway_link' or aClass == 'primary_link'): 
     return 45 
    elif (aClass == 'service' or aClass == 'track_grade1' or aClass == 'track_grade2' or aClass == 'track_grade3' or aClass == 'track_grade4' or aClass == 'track_grade5'): 
     return 15  
    else: 
     return 30 

fclass = 'tertiary_link' 

print(speed(fclass)) 

을하지만, 파이썬은 더 우아한 이것이다에서 : 대신

def speed(aClass): 
    if aClass in ['secondary', 
        'tertiary', 
        'trunk', 
        'motorway', 
        'primary']: 
     return 70 

    if aClass in ['secondary_link', 
        'tertiary_link', 
        'trunk_link', 
        'motorway_link', 
        'primary_link']: 
     return 45 

    if aClass in ['service', 
        'track_grade1', 
        'track_grade2', 
        'track_grade3', 
        'track_grade4', 
        'track_grade5']: 
     return 15 

    else: 
     return 30 


fclass = 'tertiary_link' # Only for testing 

print(speed(fclass)) 

elif 모든 브랜치가 값을 반환 할 때마다 if을 사용했습니다 (다음 문장은 건너 뜁니다).

1

class은 파이썬에서 예약어이므로 매개 변수에 다른 이름 (예 : cls)을 선택해야합니다. 또한이 코드가 실제 문제이거나 복사 붙여 넣기 문제 일 경우 이 아닌 '이라는 인용 부호가 사용 된 것인지 확실하지 않습니다. 우리가 모두 함께 가지고있는 경우,이 코드가 제대로 작동합니다 :

def speed(cls): 
    if (cls == 'secondary' or cls == 'tertiary' or cls == 'trunk' or cls == 'motorway' or cls == 'primary'): 
     return 70 
    elif (cls == 'secondary_link' or cls == 'tertiary_link' or cls == 'trunk_link' or cls == 'motorway_link' or cls == 'primary_link'): 
     return 45 
    elif (cls == 'service' or cls == 'track_grade1' or cls == 'track_grade2' or cls == 'track_grade3' or cls == 'track_grade4' or cls == 'track_grade5'): 
     return 15  
    else: 
     return 30 
+0

불행히도 코드가 완벽하게 보이지만 오류는 계속 발생합니다. 나는 지금 나의 지위에 그림을 붙이고있다 –

+0

나는 당신의 도움을 위해 upvoted, 이슈를 이해했다. –