-1

我一直在为 RNA 剪接的生物信息学据点进行 Rosalind 练习。我目前正在使用 Python 3.6 版本。它没有告诉我我的代码有任何错误,所以我假设我的代码没问题。但是,没有产生任何输出,也没有错误警告或其他任何东西。下面是我的代码:

 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))

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

>Rosalind_3363
ATGGGGCTGAGCCCATGTCTAAATGATATCTTGGTGCATTGCAATCTAACTATTTTTTCG
CAACCATGTTCCATCTGGCGCAAAATGGGCGTGTAGGGAGCTTCGCTATAGTCACTGAAG
AACATTCGCAACTTACAGCTCTCGAGAGGGTACAGCTGGACGGTGTTTGTTTGGTCTAAG
TCTGAGTCCAAAGTCGTTGAATGTCGAGCTAGGTTGACGTCATTCTTCGAGTTACGTCTT
CATTGATTCGCGGCGGCCGCCAGCATTTGATTGTACACATCCGACGTCTTTGGCAATCTA
CATAATTATATTGAGAGGGGCGCCATTACTCGAACCCATAACAAACAACTGTCCGTTTAC
AAGGTTATATTATCATGACCTAATGGTTGAGCTACGGAGTGGGGGGCCCTCGGCTACAGG
TGTTAAACTATCCTGCGGATGCGGATCTTAGCCCGATTTGCATGGCCCAGTAAGGCGCTG
ATTGTAAACCGCCTAGCATACATGTGCTTCTTACTCCAGGGTCCATTGCTACCAGTTCGC
TTCTGACGCCTCAATTGTACCTTCCTTTTTTGAATGGCAACCTGCAATAGCAGTCGACTG
ATGGGGCGTTACAGTATGAAGGCTATATTTACATTATCTCTAAACACACTGCTACCGCGA
AACCCCAACTCGGACCGGTCAGAGCGCTCGTGCTTTGTTCTTGGTCGCTAGCGACCAACA
GTGGATAGGTGGGCGCGGGCCTTGCACCTCCTAGAGCATCACGTGGAGTGGATGCAAACA
GTCTATGGTCCCCCGCTTCGGCTCACGGGTAACGTCTCTTGTGGTACTAGACCATAGGCA
TCCAGGTGAGGGCTACATCCGTATTTAATGAAACTGAGTTCCTCCAAAGCTCCTCGGGAC
GCAGGCAGGTTCATCCGCAGTCAGTAAGGGAGGGAAGAGCTTTCCCCGTTCCACCCAGAT
GCCCTGTGCACGGGAGAGAGATCCAGGTGGTAG
>Rosalind_0423
TCGCAACTTACAGCTCTCGAGAGGG
>Rosalind_5768
GCCCAGTAAGGCGCTGATTGTAAACCGCCTAGCATACAT
>Rosalind_6780
GTCTTCATTGATTCGCGGCGGCCGCCAGCA
>Rosalind_6441
GCAAACAGTCT
>Rosalind_3315
TTGGTCGCTAGCGACCAACAGTGGATAGGTGGGCGCGGGCCTTGCACCT
>Rosalind_7467
TTATCTCTAAACACACTGC
>Rosalind_3159
CGCAGTCAGTAAGGGAGG
>Rosalind_6420
TCTAAGTCTGAGTCCAAAGTCGTTGAATGTCGAGCTAGGTTGACGT
>Rosalind_8344
GGGGCGCCATTACTCGAACCCATAACAAACAACT
>Rosalind_2993
CCAGGTGAGGGCTACATCCGTAT
>Rosalind_0536
ATTATCATGACCTAATG
>Rosalind_3774
TCGCAACCATGTTCCAT
>Rosalind_7168
GGGCCCTCGGCTACAGGTGTTAAACTAT
>Rosalind_8059
CAATTGTACCTTCCTTTTTTGAATG

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

4

1 回答 1

3

要了解您需要更改代码的哪一部分,了解代码中出了什么问题会有所帮助。如果你有一个带有调试器的代码编辑器,它有助于单步调试代码。如果没有,可以使用在线工具http://pythontutor.com。这是您输入的前几行代码的直接链接

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

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

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

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

在这里,麻烦的最初迹象已经很明显了。您可能希望dna包含一个 DNA 序列。但它包含FASTA 文件的序列头。类似地,内含子也应该只包含 DNA 序列,但在这里它们还包含 FASTA 序列标头 ( >Rosalind_0423, >Rosalind_5768)。

因此,对于您现在拥有的数据,下一行发生的事情不再有意义。

在行中

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

您想从 DNA 中去除内含子,但dna不包含 DNA 序列字符串,并且introns包含除dna. 所以在这个循环之后,dna仍然等于>Rosalind_3363dna( >Ro, sal, , ...)的三个字母序列ind都不是有效密码子,因此它们不在DNA_CODON_TABLE. 因此,result()返回一个空字符串。

现在我猜测发生了什么。您从互联网上逐字提取代码(它与此处的代码完全相同),但不了解它的作用,也没有意识到原作者已经对输入数据进行了预处理。

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

  • 解析 FASTA 文件,例如使用Bio.SeqIO.parse()
  • 如有必要,连接第一个序列的 DNA 字符串。这应该最终出现在您的dna变量中
  • 以下序列字符串应该最终出现在您的introns变量中。
于 2018-05-18T09:22:00.503 回答