我有一个问题,代码大师询问编辑距离的修改版本,它是两个数字之间的编辑距离,其中只允许删除操作,删除成本=已删除的数字。
所以我试着在python上实现它。但是得到
TypeError: 'function' object has no attribute '__getitem__'
我在最后一行收到此错误,即EditDisRec函数中的返回行
这是代码
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))
答案 0 :(得分:1)
你这里有拼写错误delt[S%10,T%10]
这意味着你不能像列表那样索引它们,因为 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$