1

我正在解决“Rosalind”问题,但我已经陷入了我的代码问题所在......问题是:

DNA双螺旋的任何一条链都可以作为RNA转录的编码链。因此,一个给定的 DNA 字符串意味着共有六个阅读框,或者说 DNA 的同一区域可以翻译成氨基酸的方式:三个阅读框来自阅读字符串本身,而另外三个阅读框来自阅读其反向互补。

开放阅读框 (ORF) 是从起始密码子开始到终止密码子结束,中间没有任何其他终止密码子的框架。因此,通过将开放阅读框翻译成氨基酸直到到达终止密码子来获得候选蛋白质串。

给定: FASTA 格式中长度最多为 1 kbp 的 DNA 字符串 s。

返回:可以从 s 的 ORF 翻译的每个不同的候选蛋白质字符串。字符串可以按任何顺序返回。

这是我的代码(Python):

    DNA_Codons = {
        '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'
    }
    bases={"A":"T",
           "T":"A",
           "G":"C",
           "C":"G"}

    def Pro(DNA, start, Rev):
            #Calculates the Reverse compliment if using
            if Rev == True:
                    reverse=DNA[::-1]
                    compliment=[]
                    for base in reverse:
                            compliment+=bases[base]
                    Seq="".join(compliment)
            elif Rev== False:
                    Seq=DNA
            Protein=[]
            #Finds a start codon
            for i in range(start, len(Seq),3):
                    codon=Seq[i:i+3]
                    if codon=="ATG":
                            #Starting from that start codon, returns a protein, breaks if stop codon
                            #-2 included so that it's always in blocks of 3
                            for j in range(i,len(Seq)-2,3):
                                    new_codon=Seq[j:j+3]
                                    if DNA_Codons[new_codon]!="-":
                                            Protein+=[DNA_Codons[new_codon]]
                                    else:
                                            #Adds in the '-' to split proteins that start within the same Reading Frame
                                            Protein+=[DNA_Codons[new_codon]]
                                            break
            return Protein
    f = open('rosalind_orf.txt','r').read()
    #Puts each FASTA String into an arrary
    strings=f.split(">")

    #removes the FASTA ID from the string in array and new line characters
    for i in range(len(strings)):
            strings[i]=strings[i].strip("Rosalind_0123456789")
            strings[i]=strings[i].replace("\n","")

    DNA=strings[1]
    #Adds proteins from all Open Reading Frames
    Proteins=[]
    for i in range(len(DNA)):
            Proteins+="".join(Pro(DNA,i,False)).split('-')
            Proteins+="".join(Pro(DNA,i,True)).split('-')
    #Mades a list of Unique Proteins and prints them
    Unique_Proteins=[]
    for p in Proteins:
            if (p not in Unique_Proteins and p!=""):
                    Unique_Proteins+=[p]
                    print p

使用样本数据:

Rosalind_99 AGCCATGTAGCTAACTCAGGTTACATGGGGATGACCCCGCGACTTGGATTAGAGTCTCTTTTGGAATAAGCCTGAATGATCCGAGTAGCATCTCAG

我的代码工作正常,但是对于我得到的每个问题数据集,它都失败了......

这是我失败的问题数据集之一:

Rosalind_1485 GACCAGAATGCGTTAGTCGGCCTCAGAGCGCACAAAAACCAGTATTTACAAAGTGGGACG TAGCGCCCCGCGGCGTCCTTTTGCCCTATCGAAAGTATAGGCATCAGCTTTTTACCACCT TGTCATAGGTAAACTGCCCGACCCAGGTCCGGCCCTCAGCCCAACGCAGATAAACCAAGG TTATAGATGTGGCCTGTAGGCATATTGCTCTTAATGTTATAAAGAGCGAAGCGTGGTCTC GGTTTGTAAACATTAATCAAATTCCCAGGCACTAAGCCATGGTCGCCCCGGATTGGTTTT CCGGTGTACGCATCGGTGGCAGCTGGAGGGGACAGTTTAGGTGCTGCAATTGAACATGAA ACTGCACGAAAGGTGGGGTGGGCCGGATCTTGCGGGCCTCGAAAGGGTAGTGTTCCTCTG C​​TATCTAGTCCAATTACCTGTAGTATATATGATCAGGCCGTCGGTTACTTAGCTAAGTAA CCGACGGCCTGATCATCTCCTAGGAAATGGTCCTGAATGCGAACTAGGTTCCGTGGAATG ATGGGGCCCAGAGGAAACCTGTACGCAATGGATCCCGGACAGATAGACCGGGAGGTCTTG CAACCTCTTGTGGGAGTTACAGGCCGTACCTGAATTGCCCTCGTACCATTTGAAATGGTG CGACGCCTGTACGCAACAATCGTTCGCCTGGATAATACAGACGGCCATTTCTGTAGGAAC GATACCGTAACGCGACGTCAGGCATGACGTTAACTGCGTCACGTTTCATACCACTATGTGAGGTACCCACTCCTTCATTTACCGCGAGATAAAGAGCCACCACCACCTTCTCTTGGTTTC CATGCGCCGATCGGCTAAACGTGCATCACATTCAGGCGAAGAGTCAAATGGAAGCTCGCA ATTTTAGGCCTTTATGGCGAATATCCCGCAAGCCTTAGGCGCGT

显然,这段代码远非高效,还有很多可以改进的地方,我只是好奇为什么它不起作用。

4

0 回答 0