罗莎琳德:开放阅读框架

时间:2018-04-13 15:07:54

标签: python python-2.7 bioinformatics rosalind

我正在处理'Rosalind'的问题,而且我已经陷入了代码问题的困境......问题是:

  

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

     

开放阅读框(ORF)是从起始密码子开始的框架   并以终止密码子结束,其间没有任何其他终止密码子。   因此,通过平移开放来导出候选蛋白质串   将框架读入氨基酸直至达到终止密码子。

     

鉴于:FASTA格式的DNA串长度最多为1 kbp。

     

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

这是我的代码(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     CTATCTAGTCCAATTACCTGTAGTATATATGATCAGGCCGTCGGTTACTTAGCTAAGTAA     CCGACGGCCTGATCATCTCCTAGGAAATGGTCCTGAATGCGAACTAGGTTCCGTGGAATG     ATGGGGCCCAGAGGAAACCTGTACGCAATGGATCCCGGACAGATAGACCGGGAGGTCTTG     CAACCTCTTGTGGGAGTTACAGGCCGTACCTGAATTGCCCTCGTACCATTTGAAATGGTG     CGACGCCTGTACGCAACAATCGTTCGCCTGGATAATACAGACGGCCATTTCTGTAGGAAC     GATACCGTAACGCGACGTCAGGCATGACGTTAACTGCGTCACGTTTCATACCACTATGTG     AGGTACCCACTCCTTCATTTACCGCGAGATAAAGAGCCACCACCACCTTCTCTTGGTTTC     CATGCGCCGATCGGCTAAACGTGCATCACATTCAGGCGAAGAGTCAAATGGAAGCTCGCA     ATTTTAGGCCTTTATGGCGAATATCCCGCAAGCCTTAGGCGCGT

  

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

0 个答案:

没有答案