코드 쉐프가 편집 거리 수정 버전을 묻는 질문을 받았는데, 여기에는 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))
전체 역 추적 및 [mcve]을 입력하십시오. See [ask] –