1

我正在编写一个程序,它读取两个相同(字符串)长度的蛋白质,并返回有多少氨基酸字母不同。我设法编写了一些位,但不幸的是无法完成所有这些,所以任何人都可以通过查看我的代码来指导:

a = raw_input("Cheetah protein: ")
b = raw_input("Domestic cat protein: ")
u=zip(a,b)
d=dict(u)
x = 1
for i,j in d.items(): 
    if i == j:
        x = x + 1   
print x

这是我想要产生的输出:

Cheetah protein: IGADKYFHARGNYDAA
Domestic cat protein: KGADKYFHARGNYEAA
2 difference(s).
4

4 回答 4

1

我认为你应该更好地描述你想要达到的目标。我不明白这个检查:

if i == j:

如果要检查差异,则应改为:

if i != j:

在此修复后,您的代码为您的 cat 和 cheetah 示例提供了 3 个不同之处 - 您确定示例正确吗?

编辑:好的,我看到你从一个开始计算差异。换行

x = 1

x = 0

我认为您不想假设始终存在至少一个差异;-)

于 2012-09-02T09:20:54.440 回答
0
a="IGADKYFHARGNYDAA"
b="KGADKYFHARGNYEAA"

u=zip(a,b)          
x = 0               # not 1
for i,j in u:       # you don't need a dict here
    print i,j, 
    if i != j:      # they differ iff they are not equal to each other
        x = x + 1
        print "  neq" 
    else:
        print " eq"  
print x
于 2012-09-02T09:21:02.943 回答
0
func=lambda x,y: ((x!=y) and 1) or 0
print sum(map(func, a,b)), 'difference(s)'
于 2012-09-02T09:21:21.087 回答
0

不同的蛋白质具有不同的氨基酸序列(“字母”),但也有不同的长度。没有答案可以解决这个问题,因为您没有要求。回答你的问题:

>>> a="IGADKYFHARGNYDAA"
>>> b="KGADKYFHARGNYEAA"
>>> sum(1 for x, y in zip(a,b) if x!=y)
2

我使用“生成器表达式”为每对不同的氨基酸生成一个数字并进行总结。现在,如果您想使用类似的方法发现变化的氨基酸:

>>> diff = ''.join('-' if x==y else y for x, y in zip(a,b))
>>> print 'A:', a, '\nB:', diff
A: IGADKYFHARGNYDAA
B: K------------E--
于 2012-09-27T19:04:48.867 回答