所屬專題:[比對](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))
```