TypeError:distan上不可调用“int”对象

2024-07-05 14:23:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我复习了其他答案,但它们没有回答我的汉明距离问题

我给它一个无限的距离

import sys
def DistanceBetweenPatternAndStrings(pattern, dna):
    k = pattern
        distance = 0
        for i in range(len(dna) - len(pattern)+1):
            HammingDistance = sys.maxsize
            for j in range(len(dna) - len(pattern)+1): 
                pattern2 = dna[j:j+len(pattern)]
                if HammingDistance > HammingDistance(pattern, pattern2):
                    HammingDistance = HammingDistance(pattern, pattern2)
            distance = distance + HammingDistance
            return distance

def HammingDistance(pattern, pattern2):
    diff = 0
    for ch1, ch2 in zip(pattern, pattern2):
        if ch1 != ch2:
            diff +=1
    return diff

我应该得到没有错误的距离,但我得到的是:

TypeError: 'int' object is not callable

if HammingDistance > HammingDistance(pattern, pattern2)

Tags: in距离forlenreturnifdefsys
1条回答
网友
1楼 · 发布于 2024-07-05 14:23:42

误差与距离计算无关。问题是您有一个同名的变量和方法。你不应该那样做

您已将HammingDistance定义为方法:

def HammingDistance(pattern, pattern2):
    ...

您还将HammingDistance定义为int

HammingDistance = sys.maxsize

当你这么做的时候:

HammingDistance(pattern, pattern2)

解释器将调用最近的定义,即HammingDistance定义为int而不是您的HammingDistance方法。这就是为什么出现“'int'对象不可调用”错误的原因

只需将局部变量重命名为其他变量,以将其与方法区分开来

hamming_distance = sys.maxsize
for j in range(len(dna) - len(pattern)+1): 
    pattern2 = dna[j:j+len(pattern)]
    if hamming_distance > HammingDistance(pattern, pattern2):
        hamming_distance = HammingDistance(pattern, pattern2)
distance = distance + hamming_distance

相关问题 更多 >