2013-06-04 11 views
2

로잘린 질문에 대한 DNA 서열의 GC 함량 (%)을 계산하려고합니다. 나는 다음과 같은 코드를 가지고 있지만, 0을 반환하거나 G의 수만 또는 C 만 (백분율 없음) 리턴한다.DNA 서열의 GC 함량을 계산하기위한 초보자 파이썬 스크립트

x = raw_input("Sequence?:").upper() 
total = len(x) 
c = x.count("C") 
g = x.count("G") 

gc_total = g+c 

gc_content = gc_total/total 

print gc_content 

가 나는 또한 단지 G의와 C의, 그리고 비율의 수를 얻기 위해,이 시도했지만 그것은 단지 전체 문자열의 수를 반환 :

x = raw_input("Sequence?:").upper() 
def gc(n): 
    count = 0 
    for i in n: 
     if i == "C" or "G": 
      count = count + 1 
     else: 
      count = count 
    return count 
gc(x) 

편집 : 나는 고정 코드의 첫 번째 예에서 print 문을 잘못 입력하십시오. 그게 문제가 아니에요, 나는 단지 코드의 잘못된 스 니펫을 붙여 넣었습니다. (많은 시도가있었습니다 ...)

+0

첫 번째 오타 일 수도 있지만, 대신 'gc_content'의 'cg_content'고 말했다. 두 번째 예제에서는 else 문이 필요하지 않습니다. – squiguy

+0

나는 그것을 편집에서 고쳤다. 그게 문제의 근원이 아니었고, 나는 많은 다른 많은 시도에서 잘못된 코드 블록을 붙여 넣었습니다. – jstewartmitchel

답변

1

하지 않아야

인쇄 cg_content

인쇄 gc_content

를 읽어?

이 사실 모든에 "G"를 평가하고있다 : 코드의 다른 조각에 관해서는

, 당신의 루프는

내가 == "C"또는 "G"경우에 말한다 if 문을 true로 실행합니다.

는 또한 당신이 다른 문을 필요하지 않습니다 : 내가 == "C"또는 내가 == "G"경우

대신

을 읽어야합니다.

희망이 도움이됩니다. 어떻게 진행되는지 알려주세요.

Abdul Sattar

+0

예, 성공했습니다! 내 if 문은 꺼져있었습니다. print 서술문에서 오타가 빠르기 때문에 위의 코드를 여러 번 반복하여 스크롤하여 예제를 붙여 보았습니다. 정말 고맙습니다! – jstewartmitchel

4

문제는 부동 소수점 나누기가 아니라 정수 나누기를 수행한다는 것입니다.

을 시도
gc_content = gc_total/float(total) 
+0

그걸 고쳤습니다. 고맙습니다! 정수 나누기를 사용할 이유가 있습니까? 도와 줘서 고마워. – jstewartmitchel

0

또한 백분율로 변환하려면 답을 100으로 곱해야합니다.

0
#This works for me. 

import sys 

filename=sys.argv[1] 

fh=open(filename,'r') 

file=fh.read() 
x=file 
c=0 
a=0 
g=0 
t=0 

for x in file: 
    if "C" in x: 
     c+=1  
    elif "G" in x: 
     g+=1 
    elif "A" in x: 
     a+=1  
    elif "T" in x: 
     t+=1 

print "C=%d, G=%d, A=%d, T=%d" %(c,g,a,t) 

gc_content=(g+c)*100/(a+t+g+c) 

print "gc_content= %f" %(gc_content) 
+1

몇 가지 설명이 담긴 소스 코드 블록을 함께 사용하는 것이 좋습니다. –

0
import sys 
orignfile = sys.argv[1] 
outfile = sys.argv[2] 

sequence = "" 
with open(orignfile, 'r') as f: 
    for line in f: 
     if line.startswith('>'): 
      seq_id = line.rstrip()[0:] 
     else: 
      sequence += line.rstrip() 
GC_content = float((sequence.count('G') + sequence.count('C')))/len(sequence) * 100 
with open(outfile, 'a') as file_out: 
    file_out.write("The GC content of '%s' is\t %.2f%%" % (seq_id, GC_content)) 
+0

코드 전용 답변을 피하십시오. [둘러보기]를 확인하고 [답변] – chtz