2012-10-20 2 views
0

저는이 기능을 작성 했으므로 제대로 작동하지 않습니다. 어떤 아이디어라도 제발? 나는DNA 시퀀스 문자열에있는 뉴클레오티드를 계산하십시오.

def count_nucleotides(dna, nucleotide): 
    ''' (str, str) -> int 

    Return the number of occurrences of nucleotide in the DNA sequence dna. 

    >>> count_nucleotides('ATCGGC', 'G') 
    2 
    >>> count_nucleotides('ATCTA', 'G') 
    0 
    ''' 

    num_nucleodites=0 

    for char in dna: 
     if char is ('A'or'T'or'C'or'G'): 
      num_nucleodites=num_nucleodites + 1  
    return num_nucleodites 
+0

는 여기까지 보여주는 DNA 관련 통계를 많이 참조하십시오. 이것은 상당히 일반적인 숙제 문제입니까? – tylerl

+0

* 모든 * 뉴클레오티드를 계승 하시겠습니까, 아니면 전달 된 것입니까? – nneonneo

+1

''char ''('A'또는 'T'또는 'C'또는 'G')'는 char가 'G'인 경우 ('또는'연산자의 작동 방식으로 인해) '와 동일합니다. – Tadeck

답변

0

당신이 다음 ... 그것은 그들 각각 char을 확인해야한다고 생각하는 방법을 작동하지 않고 쓴 or 조건이 or를 사용하여 ... 문제가 문자 정의에 어떻게 든 이해 -

if char is 'A' or char is 'T' ... so on: 

연산자를 사용하면 더 좋은 방법을 사용할 수 있습니다.

이 시도 : -

for char in dna: 
     if char in 'ATCG': 
      num_nucleodites=num_nucleodites + 1 

하지만 당신은, 당신이 그들 모두 4 각 문자를 확인하지 않아도 특정 요소의 계산하려는 question 말했다 있기 때문이다. .

def count_nucleotides(dna, nucleotide): 
    num_nucleotide = 0 
    for char in dna: 
     if char == nucleotide: 
      num_nucleotide = num_nucletode + 1 
    return num_nucleotide 

또는 단지 : - - : 여기에 코드가 루프 기본 사용과 같아야 방법

def count_nucleotides(dna, nucleotide): 
    return dna.count(nucleotide) 
+0

전달 된 핵산만을 계산하는 기능을 원합니다 – user1719345

+0

일반적으로 동일성 비교에 'is'를 사용하지 않아야합니다. –

+0

@TimPietzcker 감사합니다. 그것을 편집했습니다 :) –

3

무엇 단지

def count_nucleotides(dna, nucleotide): 
    return dna.count(nucleotide) 

+0

나는 그것을 생각했지만 중복을 계산하지 않습니다 – user1719345

+1

단일 뉴클레오티드를 찾는 것처럼 보입니다.중첩 시퀀스를 찾고 있다면, 좀 더 정교한 무언가가 필요합니다. – nneonneo

+0

@ user1719345이 함수는 doc-string의 예제와 일치합니다. 그것이 옳지 않다면, 더 많은 예를들 수 있습니까? – dbr

0
if char is ('A'or'T'or'C'or'G'): 

'A' or 'T'을 평가하고하는 것은 'A'를 반환하는 그 (마음이, 그 아마 ... 지금까지 숙제에 관한 한 비행 않을거야)에 대한 다음 char 경우 확인하는 것은 동일 - 파이썬 REPL에서 그것을 시도 :

>>> ('A'or'T'or'C'or'G') 
'A' 

내가 어 생각 당신이해야 할 의미가 있었다 : 그것은 당신이 당신의 코멘트 한 항에있어서, 하나 개 이상의 염기의 서열을 중복 찾고있는 것 같다

if char in ('A', 'T', 'C', 'G'): 
+0

OK하지만 나는 – user1719345

2

. 이는 정규 표현식으로 수행 할 수 있습니다

import re 
def find_overlapping(needle, haystack): 
    return len(re.findall("(?=" + needle + ")", haystack)) 

당신은 다음과 같이 사용할 수 있습니다 :

>>> find_overlapping("AGA", "AGAGAGAAGAGAG") 
5 
+0

+1을 전달한 핵산만을 계산하고 싶습니다. 겹치는 부분을 찾아야하는'(? = X)'는 깔끔한 트릭입니다. – nneonneo

0
string = "ATAGTTCATGTACCGTTGCAGGGGG" 
print [(i,string.count(i)) for i in list("ACTG")] 
관련 문제