2

我正在尝试计算 Rosalind 问题的 DNA 序列的 GC 含量(以 % 为单位)。我有以下代码,但它返回 0,或仅返回 G 或 C 的数量(无百分比)。

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 语句中的错字。那不是问题,我只是粘贴了错误的代码片段(有很多尝试......)

4

7 回答 7

5

您的问题是您正在执行整数除法,而不是浮点除法。

尝试

gc_content = gc_total / float(total)
于 2013-06-04T01:41:47.663 回答
1

不应该:

打印 cg_content

打印 gc_content?

至于其他代码片段,您的循环说

如果 i == "C" 或 "G":

这每次都将“G”评估为真,因此将 if 语句运行为真。

相反,它应该阅读

如果 i == "C" 或 i=="G":

此外,您不需要 else 语句。

希望这可以帮助。让我们知道怎么回事。

阿卜杜勒·萨塔尔

于 2013-06-04T01:44:37.980 回答
0

您还需要将答案乘以 100 以将其转换为百分比。

于 2013-10-12T07:02:11.187 回答
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)
于 2017-03-27T06:19:59.277 回答
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))
于 2017-06-10T08:21:16.610 回答
0

也许为时已晚,但最好使用 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)
于 2018-08-02T10:11:08.537 回答
0

这可能会有所帮助

import random
dna=''.join(random.choice('ATGCN') for i in range(2048))
print(dna)
print("A count",round((dna.count("A")/2048)*100),"%")
print("T count",round((dna.count("T")/2048)*100),"%")
print("G count",round((dna.count("G")/2048)*100),"%")
print("C count",round((dna.count("C")/2048)*100),"%")
print("AT count",round((dna.count("AT")/2048)*100),"%")
print("GC count",round((dna.count("GC")/2048)*100),"%")
于 2021-10-22T08:14:39.657 回答