所属专题:[比对](README.md)
 
## 问题
给定两个长度相等的字符串`$ s $`和`$ t $`,它们之间的汉明距离(Hamming distance),是`$ s $`和`$ t $`对应位置上的字符不相同的个数,用`$ d_H(s,t) $`表示。见下图:(图片来源:[ROSALIND](http://rosalind.info/media/problems/hamm/))
*****
<div align="center"><img src="http://rosalind.info/media/problems/hamm/Hamming_distance.png"></div>
<div align="center">图中所示的两条序列间的汉明距离为7. 不匹配的字符用红色标示。</div>
*****
**输入:** 两个长度相等的DNA序列`$ s $`与`$ t $`(长度不超过1 kb)。
**输出:** 它们的汉明距离`$ d_H(s,t) $`.
**样例数据:**
~~~
GAGCCTACTAACGGGAT
CATCGTAATGACGGCCT
~~~
**样例输出:**
~~~
7
~~~
 
## 背景知识
该问题涉及“汉明距离”(Hamming distance)概念的理解与计算,它是衡量两个等长序列相似度的指标,也是适用范围更广的“编辑距离”(Editing distance)的特例。详情请查阅ROSALIND网站上[关于该问题的背景说明](http://rosalind.info/problems/hamm/)。
 
## 解答
```
def hamming_dist(s1, s2):
"""计算两个等长序列s1, s2的汉明距离;若序列不等长,返回异常值-1"""
if len(s1)!=len(s2):
return -1
else:
dh = 0
for i in range(len(s1)):
if s1[i]!=s2[i]:
dh += 1
return dh
## --main--
with open("rosalind_hamm.txt", 'r') as f1:
dna_seqs = f1.readlines()
for i in range(len(dna_seqs)):
dna_seqs[i] = dna_seqs[i].strip()
result = hamming_dist(dna_seqs[0], dna_seqs[1])
with open("rosalind_hamm_out.txt", 'w') as f2:
if result==-1:
f2.write("Error: The two given strings are in different length! No Hamming distance!")
else:
f2.write(str(result))
```