我查看了其他答案,但他们没有回答汉明距离的问题。
我给它提供了无限远的距离。
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”对象不可调用
在
中if HammingDistance > HammingDistance(pattern, pattern2)
答案 0 :(得分:1)
该错误与距离计算无关。问题是您有一个具有相同名称的变量和方法。您应该从不这样做。
您已将HammingDistance
定义为方法:
def HammingDistance(pattern, pattern2):
...
您还将HammingDistance
定义为int
:
HammingDistance = sys.maxsize
执行此操作时:
HammingDistance(pattern, pattern2)
解释器将调用最接近的定义,即定义为HammingDistance
的{{1}},否您的int
方法。这就是为什么出现“ 'int'对象不可调用”错误的原因。
只需将本地变量重命名为其他名称,即可将其与方法区分开来。
HammingDistance