首页 > 解决方案 > 如何编写字符串算法

问题描述

给定一个 FASTA 文本文件 (Rosalind_gc.txt),我应该检查每个 DNA 记录并确定鸟嘌呤-胞嘧啶 (GC) 含量的百分比 (%)。

这方面的例子是:

样本数据集:

>Rosalind_6404
CCTGCGGAAGATCGGCACTAGAATAGCCAGAACCGTTTCTCTGAGGCTTCCGGCCTTCCC
TCCCACTAATAATTCTGAGG    
>Rosalind_5959
CCATCGGTAGCGCATCCTTAGTCCAATTAAGTCCCTATCCAGGCGCTCCGCCGAAGGTCT
ATATCCATTTGTCAGCAGACACGC
>Rosalind_0808
CCACCCTCGTGGTATGGCTAGGCATTCAGGAACCGGAGAACGCTTCAGACCAGCCCGGAC
TGGGAACCTGCGGGCAGTAGGTGGAAT

样本输出:

罗莎琳德_0808 60.919540

所以基本上遍历每个字符串,计算 G/C 出现的次数,然后将总数除以每个字符串的长度。我的问题是学习如何识别代码中的中断(即 >Rosalind_6404 )。我想要一个不使用 Biopython 和 biopython 方法的代码示例。

标签: pythonbioinformaticsbiopythonstring-algorithmrosalind

解决方案


您可以逐行读取文件并将序列数据累积到以“>”开头的下一行(再加上一次文件末尾)

def getCount(seq):
    return seq.count("G")+seq.count("C") 

with open("input.txt","r") as file:
    sequence = ""
    name     = ""
    for line in file:
        line = line.strip()
        if not line.startswith(">"):
            sequence += line
            continue
        if name != "":
            print(name, 100*getCount(sequence)/len(sequence))
        name     = line[1:]
        sequence = ""
    print(name, 100*getCount(sequence)/len(sequence))

# Rosalind_6404 53.75
# Rosalind_5959 53.57142857142857
# Rosalind_0808 60.91954022988506

推荐阅读