2012-09-02 2 views
1

동일한 (문자열) 길이의 두 개의 단백질을 읽고 얼마나 많은 아미노산 글자가 다른지를 반환하는 프로그램을 작성 중입니다. 나는 비트의 일부를 작성하는 관리하지만 불행하게도 그래서 어떤 내 코드에보고함으로써이를 통해 안내하시기 바랍니다 수있는 그것의 모든을 완료 할 수 없습니다 :Python 실수 구분하기

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). 

답변

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 
1

나는 당신이 성취하려는 것을 더 잘 묘사해야한다고 생각합니다. 당신이 차이를 확인하려면 대신 작성해야,

if i == j: 

:

if i != j: 

를이 코드가 나에게 고양이와 함께 예를 들어 3 개 차이를 제공합니다 수정 후 나는이 검사를 이해하지 못하는 치타 - 예가 맞다는 것이 확실합니까?

수정 : 알겠습니다. 차이점은 하나부터 시작합니다. 난 당신이 적어도 하나의 차이 ;-)

+0

그래 유 – rocker789

0
func=lambda x,y: ((x!=y) and 1) or 0 
print sum(map(func, a,b)), 'difference(s)' 
+1

둘을 비교하여 UR 자기하여 확인하실 수 있습니다 및/또는 트릭은 매우 오래된이며,보다 거의 더 명확를 단지'x! = y'의 산술 값을 사용합니다. 또한'map'을 호출하는 것보다 생성기 표현식을 사용하는 것이 더 간단합니다. –

+0

@Karl, 그리고/또는 트릭을 믿을 수 없을 정도로 오래되게 만들었습니까? 나는 그것이 자기 만의 진술 이라기보다는 편리한 표현이라고 생각한다. 또한, 발전기 표현을지도보다 더 간단하게 (그리고 더 직관적으로) 만드는 것은 무엇입니까? –

0

다른 단백질이 항상 존재한다고 가정 할 생각하지 않는다

x = 1 

x = 0 

에 줄을 변경 다른 아미노산 서열 ("글자")을 가지고 있지만 길이가 다릅니다. 당신이 요청하지 않았기 때문에 응답이 없습니다. 귀하의 질문에 대답 :

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

"발전기 표현"을 사용하여 각기 다른 아미노산 쌍에 대해 숫자 1을 생성하고 합산했습니다. 지금 당신은 유사한 방법을 사용하여 변경된 아미노산을 발견 할 경우 :

>>> diff = ''.join('-' if x==y else y for x, y in zip(a,b)) 
>>> print 'A:', a, '\nB:', diff 
A: IGADKYFHARGNYDAA 
B: K------------E--