编辑数字的距离特定实现。蟒蛇

时间:2016-10-02 18:50:47

标签: python python-2.7

我有一个问题,代码大师询问编辑距离的修改版本,它是两个数字之间的编辑距离,其中只允许删除操作,删除成本=已删除的数字。

所以我试着在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))

1 个答案:

答案 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$