gpt4 book ai didi

python - 从循环中的序列中获取下一组字母

转载 作者:太空宇宙 更新时间:2023-11-04 08:52:30 25 4
gpt4 key购买 nike

我正在开发一个从序列中识别 ORF 的程序。当程序应该分析序列中的密码子时,我似乎遇到了一个错误。我的代码是:

def __init__(self,sequence):
self.sequence = Seq(sequence)
self.reverse = self.sequence.reverse_complement()
self.sequence = str(self.sequence)
self.stopcodons = ["TAG", "TAA", "TGA"]
self.start = 'ATG'
self.length = 0
self.result = ("+",0,0,0,0)

def codon(self,frame):
start = frame
while start +3 <=len(self.sequence):
yield (self.sequence[start:start+3],start)
start += 3
#print (start)

def direction(self):
direction = "+"
for frame in range(3):
self.ORF(frame, direction)
direction = "-"
for frame in range(3):
self.sequence = self.reverse
self.ORF(frame, direction)
SeqAnalyzer.results()

def ORF(self, frame, direction):
orf_beg = 0
codon_frame = self.codon(frame)
while True:
i, index = next(codon_frame)
if i in self.start or not self.start and i not in self.stopcodons:
orf_beg = index + 1
elif i in self.stopcodons:
orf_ending = index + 3
length = (orf_ending - orf_beg) + 1
if length > self.length:
self.length = length
self.result = (direction, frame, orf_beg, orf_ending, length)
print(self.result)
break
def results(self):
print("'{}{:+d} {:>5d}..{:>5d} {:>5d}'" .format(self.result))

运行时报错:

File "C:/Users/Alex/OneDrive/Python/Lab 5/findORFs.py", line 33, in direction

self.ORF(frame, direction)
File "C:/Users/Alex/OneDrive/Python/Lab 5/findORFs.py", line 44, in ORF

i, index = next(codon_frame)
StopIteration

问题似乎来 self 的 Next(codon_frame),但不知道我将如何解决它。

最佳答案

代替

codon_frame = self.codon(frame)
while True:
i, index = next(codon_frame)`

你可能应该这样做:

for i, index in self.codon(frame):

如果出于某种原因你想继续手动执行它,那么你需要用 try/except 包装 next() 调用:

try:
i, index = next(codon_frame)
except StopIteration:
break

关于python - 从循环中的序列中获取下一组字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33683387/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com