2016-10-24 3 views
0

"DNA 가닥"에있는 G와 C의 수를 계산하고 G의 백분율을 계산하는 코드를 만들려고합니다. + C가 그 가닥에있다.2 글자 수를 계산하고 단어의 전체 길이로 나누는 함수 정의

gcContent('CGGTCCAATAGATTCGAA') 
44.4444444444 

해당 문자열에는 18 자, 8 개의 G 's + C는 함께 있습니다.

def gcContent(dnaMolecule): 
    count = 0 
    for g in dnaMolecule: 
     dnaMolecule.count('g') 
     count += 1 
    return count 

을 내가 대화 형 파이썬에 입력하면 결과를 쉘 : 나는 심지어 내 코드의 가닥에 G의의 문자를 세는 지금까지 고군분투

, 이것은 내가 지금까지 무엇을 가지고 이는 다음과 같습니다

In [1]: gcContent('a') 
Out[1]: 1.0 

그것은 지금까지 G의 양을 계산 아니에요과 상관없이 내가 gcContent 후 괄호 안의 한 문자를 입력하면 어떤 일을 말한다.

+0

당신은 필요가 없습니다를 제공

print(GC('CGGGggg')) 

이로

는 @ TammoHeeren의 대답은 아래에 설명되어, GC 또한 위/아래의 경우 문제를 돌봐 이것에 대한 루프는'dnaMolecule.count ('G')'이면 충분하다. – vaultah

+0

카운트 또는 루프를 사용하지만 두 가지 모두를 사용하지 않고 카운트 결과와 가장 중요한' 'g'! = 'G' '를 지정한다. – polku

+0

당신은 'dnaMolecule.count ('g ')'를 호출하고 있지만 _result_를 사용하여 아무것도하지 않습니다. 또한, 당신은'.count ('g')'가 아닌'.count ('G')'를 원할 것입니다. –

답변

2

모든 문자열에있는 count 메서드를 사용할 수 있습니다.

파이썬 2.x를 들어
def gcContent(dnaMolecule): 
    dnaMolecule = dnaMolecule.lower() 
    count = dnaMolecule.count('g') + dnaMolecule.count('c') 
    return count/len(dnaMolecule) 

과 0 사이의 값 점점 - 0 (100) 대신 - 1 : Biopython을 활용할 수 있다면

def gcContent(dnaMolecule): 
    dnaMolecule = dnaMolecule.lower() 
    count = dnaMolecule.count('g') + dnaMolecule.count('c') 
    return 100.0 * count/len(dnaMolecule) 
+0

멋지고 간단한 대답 (나와 upvote); 내 유일한 의견은 파이썬 2에서는 파이썬 2에서 정수 나누기 문제 때문에'count/float (len (dnaMolecule))'을 반환해야한다는 것입니다. 그렇지 않으면 좋은 대답입니다. – HyperNeutrino

+0

입력이'CGGGggg' 인 경우 –

+2

@AlexL. 동의했다. OP는 python-3.x를 지정했습니다. –

0

을 이미 계산하는 미리 정의 된 기능 GC있다 주어진 시퀀스의 GC 함량 :

from Bio.SeqUtils import GC 

print(GC('CGGTCCAATAGATTCGAA')) 

원하는 출력 준다 :

,174을
44.44444444444444 

시퀀스에 대해 수행 할 추가 작업에 따라 고유 한 함수를 작성하는 대신 미리 정의 된 함수를 사용하는 것이 좋습니다.

편집 :

100.0 
+1

좋은 대답. 나는 누군가가 실제로 이것을 위해 모듈을 만들었다는 것을 몰랐다. 흥미 롭 군! – HyperNeutrino

관련 문제