RNA剪接Python(没有给出输出)

时间:2018-05-17 13:50:02

标签: python bioinformatics rosalind

我一直致力于Rosalind exercises for Bioinformatics stronghold on RNA Splicing。我目前正在使用Python 3.6版本。它没有告诉我我的代码中有任何错误,所以我假设我的代码没问题。但是,没有产生输出,没有错误警告或任何。以下是我的代码:

user.confirmation_token?

这是rosalind_splc.txt文本文件中的内容:

 DNA_CODON_TABLE = {
        'TTT': 'F',     'CTT': 'L',     'ATT': 'I',     'GTT': 'V',
        'TTC': 'F',     'CTC': 'L',     'ATC': 'I',     'GTC': 'V',
        'TTA': 'L',     'CTA': 'L',     'ATA': 'I',     'GTA': 'V',
        'TTG': 'L',     'CTG': 'L',     'ATG': 'M',     'GTG': 'V',
        'TCT': 'S',     'CCT': 'P',     'ACT': 'T',     'GCT': 'A',
        'TCC': 'S',     'CCC': 'P',     'ACC': 'T',     'GCC': 'A',
        'TCA': 'S',     'CCA': 'P',     'ACA': 'T',     'GCA': 'A',
        'TCG': 'S',     'CCG': 'P',     'ACG': 'T',     'GCG': 'A',
        'TAT': 'Y',     'CAT': 'H',     'AAT': 'N',     'GAT': 'D',
        'TAC': 'Y',     'CAC': 'H',     'AAC': 'N',     'GAC': 'D',
        'TAA': '-',     'CAA': 'Q',     'AAA': 'K',     'GAA': 'E',
        'TAG': '-',     'CAG': 'Q',     'AAG': 'K',     'GAG': 'E',
        'TGT': 'C',     'CGT': 'R',     'AGT': 'S',     'GGT': 'G',
        'TGC': 'C',     'CGC': 'R',     'AGC': 'S',     'GGC': 'G',
        'TGA': '-',     'CGA': 'R',     'AGA': 'R',     'GGA': 'G',
        'TGG': 'W',     'CGG': 'R',     'AGG': 'R',     'GGG': 'G'
    }


    def result(s):
        result = ''

        lines = s.split()
        dna = lines[0]
        introns = lines[1:]

        for intron in introns:
            dna = dna.replace(intron, '')

        for i in range(0, len(dna), 3):
            codon = dna[i:i+3]

            protein = None
            if codon in DNA_CODON_TABLE:
                protein = DNA_CODON_TABLE[codon]

            if protein == '-':
                break

            if protein:
                result += protein

        return ''.join(list(result))


    if __name__ == "__main__":

        """small_dataset = ' '"""

        large_dataset = open('rosalind_splc.txt').read().strip()

        print (result(large_dataset))

由于没有给出输出,我想知道我的代码的哪一部分需要修复才能输出。感谢。

1 个答案:

答案 0 :(得分:3)

要了解需要更改代码的哪一部分,有助于了解代码中出现的问题。如果您有一个带调试器的代码编辑器,则有助于逐步完成代码。如果您没有,可以使用在线工具http://pythontutor.com。这是direct link to your code with the first few lines of your input

单击代码下的前进按钮。在第20步,您将跳转到函数result()。在步骤24之后,您的输入将在换行符上拆分。您可以看到lines现在是:

lines = ['>Rosalind_3363', 
         'ATGGGGCTGAGCCCATGTCTAAATGATATCTTGGTGCATTGCAATCTAACTATTTTTTCG', 
         'CAACCATGTTCCATCTGGCGCAAAATGGGCGTGTAGGGAGCTTCGCTATAGTCACTGAAG', 
         '>Rosalind_0423', 
         'TCGCAACTTACAGCTCTCGAGAGGG', 
         '>Rosalind_5768', 
         'GCCCAGTAAGGCGCTGATTGTAAACCGCCTAGCATACAT']

在步骤25中,您将lines的第一项分配给变量dna。因此dna现在等于>Rosalind_3363。在下一步中,将列表中的其余项目分配给变量introns。所以我们现在有了

dna = '>Rosalind_3363'
introns = ['ATGGGGCTGAGCCCATGTCTAAATGATATCTTGGTGCATTGCAATCTAACTATTTTTTCG', 
         'CAACCATGTTCCATCTGGCGCAAAATGGGCGTGTAGGGAGCTTCGCTATAGTCACTGAAG', 
         '>Rosalind_0423', 
         'TCGCAACTTACAGCTCTCGAGAGGG', 
         '>Rosalind_5768', 
         'GCCCAGTAAGGCGCTGATTGTAAACCGCCTAGCATACAT']

这里出现问题的最初迹象已经很明显。您可能希望dna包含DNA序列。但它包含FASTA file的序列标题。同样,内含子也应该只包含DNA序列,但在这里它们也包含FASTA序列标题(>Rosalind_0423>Rosalind_5768)。

所以在下一行中发生的事情对你现在拥有的数据不再有任何意义。

在行

for intron in introns:
    dna = dna.replace(intron, '')

您想要从DNA中删除内含子,但dna不包含DNA序列字符串,introns包含除dna的子字符串以外的其他内容。因此,在此循环之后,dna仍然等于>Rosalind_3363dna>Rosalind,......)的三个字母序列都不是有效密码子,因此DNA_CODON_TABLE中找不到它们。因此,result()返回一个空字符串。

现在我猜测发生了什么。您从互联网(it is exactly equal to the code here)逐字提取代码而不了解它的作用,并且没有意识到原作者已经预处理了输入数据。

那么,您需要做些什么来修复代码?

  • 解析FASTA文件,例如使用Bio.SeqIO.parse()
  • 如有必要,连接第一个序列的DNA串。这应该归结为dna变量
  • 以下序列字符串应该在introns变量中结束。