2016-10-02 1 views
1

코드 쉐프가 편집 거리 수정 버전을 묻는 질문을 받았는데, 여기에는 2 자리 숫자 사이의 거리가 편집되었습니다. 삭제 작업 만 허용되고 삭제 비용은 삭제 된 번호입니다.숫자에 대한 거리 지정 구현을 편집하십시오.

그래서 이것을 파이썬에서 구현하려고했습니다. 하지만 EditDisRec 기능 여기

의 마지막 라인 즉, 리턴 라인이 오류를 얻고있다

TypeError: 'function' object has no attribute '__getitem__' 

을 얻는 것은 당신이 여기 delt[S%10,T%10]

이 수단 오타 한

def ISTHERE(x,y): 
    a=len(str(y)) 
    b=y 
    for i in range(0,a): 
     if b%10 == x: 
      return(True) 
      break 
     else: 
      b=b/10 
    return(False)    


def sum_digits(N): 
    n=int(N) 
    s = 0 
    while n: 
     s += n % 10 
     n //= 10 
    return s 
def delt(x,y): 
    if int(x)==int(y): 
     return 0 
    else: 
     return int(x)+int(y) 

def EditDistRec(S,T): 
    if S==0: 
     return sum_digits(T) 
    elif T==0: 
     return sum_digits(S) 
    elif (S==1 or S==2 or S==3 or S==4 or S==5 or S==6 or S==7 or S==8 or S==9): 
     if ISTHERE(S,T)==True : 
      return sum_digits(T) - S 
     elif ISTHERE(S,T)==False: 
      return sum_digits(T) 
    elif (T==1 or T==2 or T==3 or T==4 or T==5 or T==6 or T==7 or T==8 or T==9): 
     if ISTHERE(T,S)==True : 
      return sum_digits(S) - T 
     elif ISTHERE(T,S)==False: 
      return sum_digits(S) 


    return min(EditDistRec(S/10,T/10) + delt[S%10,T%10],(EditDistRec(S ,T/10) + int(T%10)),(EditDistRec(S/10,T) + int(S%10))) 


print(EditDistRec(7315,713)) 
+1

전체 역 추적 및 [mcve]을 입력하십시오. See [ask] –

답변

1

코드를입니다 getitem이이 작업을 처리하는 메서드이므로 목록처럼 인덱스 할 수 없습니다. delt는 기능이 아닌 목록 수정

입니다 :

return min(EditDistRec(S/10,T/10) + delt(S%10,T%10),(EditDistRec(S ,T/10) + int(T%10)),(EditDistRec(S/10,T) + int(S%10))) 

출력 :

sh-4.3$ python main.py                
7 
sh-4.3$ 
+0

Oh man 고마워. ..이 시점에서 나는 붙어 있었다. 바보 같은 사람 –

+0

다행. 귀하의 질의가 해결되면 답변을 수락 하시거나 추가 도움이 필요하십니까? – Cyclotron3x3