# DNA -> RNA -> Protein _standardGeneticCode = { "aaa": "K", "aac": "N", "aag": "K", "aau": "N", "aca": "T", "acc": "T", "acg": "T", "acu": "T", "aga": "R", "agc": "S", "agg": "R", "agu": "S", "aua": "I", "auc": "I", "aug": "M", "auu": "I", "caa": "Q", "cac": "H", "cag": "Q", "cau": "H", "cca": "P", "ccc": "P", "ccg": "P", "ccu": "P", "cga": "R", "cgc": "R", "cgg": "R", "cgu": "R", "cua": "L", "cuc": "L", "cug": "L", "cuu": "L", "gaa": "E", "gac": "D", "gag": "E", "gau": "D", "gca": "A", "gcc": "A", "gcg": "A", "gcu": "A", "gga": "G", "ggc": "G", "ggg": "G", "ggu": "G", "gua": "V", "guc": "V", "gug": "V", "guu": "V", "uaa": "*", "uac": "Y", "uag": "*", "uau": "Y", "uca": "S", "ucc": "S", "ucg": "S", "ucu": "S", "uga": "*", "ugc": "C", "ugg": "W", "ugu": "C", "uua": "L", "uuc": "F", "uug": "L", "uuu": "F" } def translation( theSeq ): """Translate DNA to Protein >>> translation( "" ) Traceback (most recent call last): ... ValueError: substring not found >>> translation( "acgt" ) Traceback (most recent call last): ... ValueError: substring not found >>> translation( "aug" ) 'M' >>> translation( "cccauggugacguacugagccuga" ) 'MVTY*' >>> translation( "cccauggugacguaccgagccug" ) 'MVTYRA' >>> translation( "cccauggugacguaccgagccu" ) 'MVTYRA' >>> translation( "cccauggugacguaccgagcc" ) 'MVTYRA' >>> translation( "cccauggugacguaccgagc" ) 'MVTYR' >>> translation( None ) Traceback (most recent call last): ... AttributeError: 'NoneType' object has no attribute 'lower' """ answer = "" ourSeq = theSeq.lower() n = ourSeq.index( "aug" ) for i in range( n, len( theSeq ) - (len(theSeq) % 3), 3 ): answer += _standardGeneticCode[ourSeq[i:i+3]] if answer[-1] == '*': break return answer if __name__ == '__main__': import doctest doctest.testmod()