2013-06-04 1 views
2

J'essaie de calculer la teneur en GC (en%) d'une séquence d'ADN pour une question de Rosalind. J'ai le code suivant, mais il renvoie 0, ou seulement le nombre de G seul ou C seul (pas de pourcentage).Script débutant en Python pour calculer la teneur en GC dans la séquence d'ADN

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 

J'ai aussi essayé, juste pour obtenir un nombre de G et C de, et non le pourcentage, mais il retourne juste un compte de la chaîne entière:

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) 

EDIT: Je fixe la typo dans l'instruction print dans le premier exemple de code. Ce n'était pas le problème, j'ai juste collé le mauvais extrait de code (il y avait beaucoup de tentatives ...)

+0

Le premier est peut-être une faute de frappe, mais vous avez dit 'cg_content' au lieu de 'gc_content'. L'instruction else n'est pas nécessaire dans le second exemple. – squiguy

+0

Je l'ai corrigé dans un montage. Ce n'était pas la racine du problème, je viens de coller le mauvais bloc de code de mes nombreuses tentatives d'essayer différentes choses. – jstewartmitchel

Répondre

1

ne devrait pas:

print cg_content

lire

print gc_content?

Quant à l'autre bout de code, votre boucle dit

si i == "C" ou "G":

Ce évalue "G" true tous les temps et ainsi exécuter l'instruction if comme vrai.

Au lieu de cela, il faut lire

si i == "C" ou i == "G":

En outre, vous ne pas besoin de cette déclaration d'autre.

Espérons que cela aide. Tiens nous au courant de comment ça se passe.

Abdul Sattar

+0

Oui ça a marché! Ma déclaration if était désactivée. Aussi vite que la faute de frappe dans la déclaration d'impression, c'était un résultat de me faire défiler toutes les différentes itérations du code ci-dessus pour coller un exemple pour vous montrer les gars. Merci beaucoup! – jstewartmitchel

4

Votre problème est que vous exécutez une division entière, pas une division en virgule flottante.

Essayez

gc_content = gc_total/float(total) 
+0

Cela l'a corrigé. Je vous remercie! Y at-il vraiment une raison d'utiliser la division entière? Merci beaucoup pour votre aide. – jstewartmitchel

0

Vous devez également multiplier la réponse par 100 pour le convertir en un pourcentage.

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

Il est recommandé d'accompagner un bloc de code source avec quelques mots d'explication. –

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

Veuillez éviter les réponses en code uniquement. Vérifiez le [tour] et lisez [réponse] – chtz

Questions connexes