Сцэнар для пачаткоўца Python для вылічэнні ўтрымання GC у ДНК-паслядоўнасці,

Я спрабую вылічыць ўтрыманне GC (у%) ДНК-паслядоўнасці для пытання Разалінды. У мяне ёсць наступны код, але ён вяртае 0, ці толькі лік асобна або C у адзіночку (без адсоткавага) G.

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 і С., а не працэнт, але ён проста вяртае лічыльнік ўсёй радкі:

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: Я выправіў памылку друку ў аператары друку ў першым прыкладзе кода. Гэта не праблема, я проста ўставіў няправільны фрагмент кода (там было шмат спробаў ...)

2
Першы з іх можа быць памылка друку, але вы сказалі «cg_content» замест «gc_content». Там няма неабходнасці ў заяве яшчэ ў другім прыкладзе.
дададзена аўтар squiguy, крыніца
Я усталяваў яго ў рэдагаванні. Гэта быў не корань праблемы, я проста ўставіў няправільны блок кода з маіх шматлікіх, шматлікіх спробаў спрабаваць розныя рэчы.
дададзена аўтар jstewartmitchel, крыніца

6 адказы

Ваша праблема заключаецца ў тым, што вы performming цэлалікавага дзялення, кропка падзелу ня плавала.

спрабаваць

gc_content = gc_total/float(total)
4
дададзена
Гэта зафіксаваў яго. Дзякуй! Ёсць ці калі-небудзь сапраўды якая-небудзь прычына выкарыстоўваць цэлалікавых дзяленне? Вялікі дзякуй за вашу дапамогу.
дададзена аўтар jstewartmitchel, крыніца

Не павінны:

<�Р> друк cg_content

счытванне

<�Р> друк gc_content?

Што тычыцца іншага фрагмента кода, ваш цыкл кажа

<�Р> калі я == "С" або "G": </р>

Гэта ацэнка «G» ісціна кожны раз, і, такім чынам, выканаўшы, калі заяву, як дакладна.

Instead, it should счытванне

<�Р> калі я == "С" або я == "G": </р>

Акрамя таго, вам не трэба нешта заяву.

Спадзяюся, што гэта дапамагае. Дайце нам ведаць, як яна ідзе.

Абдул Саттар

1
дададзена
Ды што спрацавала! Мой, калі заява была выключана. Як хутка, як памылка друку ў заяве для друку, што было вынікам мяне пракруткай ўсіх розных ітэрацый коды вышэй, каб ўставіць прыклад, каб паказаць вам, хлопцы. Вялікае вам дзякуй!
дададзена аўтар jstewartmitchel, крыніца

Можа быць, занадта позна, але гэта лепш, выкарыстоўваючы Bio

#!/usr/bin/env python

import sys
from Bio import SeqIO

filename=sys.argv[1]

fh= open(filename,'r')

parser = SeqIO.parse(fh, "fasta")

for record in parser:
    c=0
    a=0
    g=0
    t=0
    for x in str(record.seq):
        if "C" in x:
            c+=1    
        elif "G" in x:
            g+=1
        elif "A" in x:
            a+=1    
        elif "T" in x:
            t+=1
gc_content=(g+c)*100/(a+t+g+c)

print "%s\t%.2f" % (filename, gc_content)
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)
0
дададзена
вы лічыце загаловак паслядоўнасці, не?
дададзена аўтар F.Lira, крыніца
Гэта лепшая практыка на SO, каб суправаджаць зыходны блок кода некалькі слоў тлумачэнні.
дададзена аўтар Tomáš Hübelbauer, крыніца
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, крыніца