Exercism: Protein Translation (Python)
感觉是个挺有意思的题。把RNA序列转化成蛋白质名称。不过第一次做的时候,看错题了,以为maping是顺序的,比如(UCU, UCC, UCA, UCG | Serine), 是必须依次找到4个配对才可以确定是Serine。后来发现没有那么麻烦,mapping实际上是一个set, 任意一个配对都可以map到蛋白质的名字。这样就简单多了。
from enum import Enum
STOP = {"UAA", "UAG", "UGA"}
class Protein(Enum):
METHIONINE = "Methionine"
PHENYLALANINE = "Phenylalanine"
LEUCINE = "Leucine"
SERINE = "Serine"
TYROSINE = "Tyrosine"
CYSTEINE = "Cysteine"
TRYPTOPHAN = "Tryptophan"
Codens_Protein = {
"AUG": Protein.METHIONINE,
"UUU": Protein.PHENYLALANINE,
"UUC": Protein.PHENYLALANINE,
"UUA": Protein.LEUCINE,
"UUG": Protein.LEUCINE,
"UCU": Protein.SERINE,
"UCC": Protein.SERINE,
"UCA": Protein.SERINE,
"UCG": Protein.SERINE,
"UAU": Protein.TYROSINE,
"UAC": Protein.TYROSINE,
"UGU": Protein.CYSTEINE,
"UGC": Protein.CYSTEINE,
"UGG": Protein.TRYPTOPHAN,
}
def proteins(strand):
sequences = []
for i in range(int(len(strand)/3)):
sequences.append(strand[i*3:i*3+3])
proteins = []
for seq in sequences:
if seq in STOP:
break
proteins.append(Codens_Protein[seq].value)
return proteins看了看其他的解法,我在切配对时做的有些傻了。可以直接用range生成, 不用除index,
for i in range(0, len(strand), 3)):
sequences.append(strand[i:i+3])
评论
发表评论