我很抱歉,如果有人问过这个问题,但我甚至不知道该搜索什么。你知道吗
我刚刚开始学习python,目前正在编写我的第一个程序。其思想是识别一个蛋白质序列中所有打开的阅读框,对于非生物学家来说,这意味着识别一个字符串中所有出现的“M…*”。你知道吗
这是我到目前为止,它几乎工作,但打印重复每n而不是跳到下一个“M…”。你知道吗
# calculates amino acid sequence from nucleotide sequence
protein = nucleotide_seq.transcribe().translate()
print("5'3' Frame 1: \n" + protein)
# Calculates all open reading frames in protein sequence
for n in range(len(protein)):
met = protein.find("M", n)
stop = protein.find("*", met)
orf = protein[met:stop]
print("Open reading frame starting at residue " + str(met+1) + " : " + orf)
nextmet = protein.find("M", stop)
n += nextmet
蛋白质示例:
DIMGYF*GLTGSR*VLSSGWIRAQSCTECG*SSEAGVEVRGVRQTDRHSQPARSAV*SELQILFSFHLLSNCPELAPVAPGLVFRECPESLVSSRPREESPAAQALLTAAESSGTHAPAGGSRRAAAAAKNFPGWEDRRQVAESRSQLLQAFPAS*ASPRR*RPEGGGEPRKRRRTCAQLRSHRLLNLGEREPRLPGAPSP*QRRRGQVVGVRAAKTRRRPATAGSALIRSAGRAAALGSEFACGLRGTAAHEERSVSDRDFSKPGSARESTSKSAGGILINPALPGASW*GGRSGDDSQRVRALLEKLSLSKAPGGAGVPRLPQPCCGPETCARSPN*PHVK*RTVL*LQRWKRPSMTMPSTPRSSRPRADLMATVTPRS*
接收重复的原因是使用for循环并将n增加1,而不是将n移到上一帧的末尾:
如果
M...M..*
不是有效的结果,可以将M
添加到禁止的字符:M([^\*M]+)\*
。你知道吗n += nextmet
不会做您想要的事情,因为当控件返回到for
循环的顶部时,n
会重置为范围内的下一个数字。因此,您可以使用while
循环,而不是使用for
循环。例如我把
if
语句放在那里,因为如果find
找不到它的目标,它将返回-1。你知道吗这里有一个更完整的演示,现在你给了我们一些数据来处理。你知道吗
输出
相关问题 更多 >
编程相关推荐