我是python的新手,非常感谢你的帮助。
我有这个脚本,它按序列中的每三个碱基计数,直到它识别终止密码子,然后中断并返回该值。这适用于每个阅读框0,+ 1,+ 2。
我希望它在脚本运行到序列末尾之前返回值0,然后才能识别终止密码子。目前,脚本为count0返回18,当序列结束时,应该为0,然后才能找到“TAG”或“TAA”
感谢任何帮助!
seq="TCATTCTaTTTAAAAAAatATAAAaGGGgTTTTGGGgTTTtGGGGTTTtGGGG"
stop_codons = ["TAG", "TAA"]
count0 = 0
n = 0
while n < len(seq):
if seq[n:n+3] in stop_codons:
break
count0 += 1
n += 3
print count0
count1 = 0
n = 1
while n < len(seq):
if seq[n:n+3] in stop_codons:
break
count1 += 1
n += 3
print count1
count2 = 0
n = 2
while n < len(seq):
if seq[n:n+3] in stop_codons:
break
count2 += 1
n += 3
print count2
结果:
18
3
6
答案 0 :(得分:2)
一个简单的解决方法就是做这样的事情。不过你应该考虑重构你的代码。
stop_codons = ["TAG", "TAA"]
count0 = 0
n = 0
found = False
while n < len(seq):
if seq[n:n+3] in stop_codons:
found = True
break
count0 += 1
n += 3
if not found:
count0 = 0
答案 1 :(得分:2)
我建议将迭代代码推送到函数中:
def get_codon_index(seq, start_idx):
count = 0
n = start_idx
while n < len(seq):
if seq[n:n+3] in stop_codons:
return count
count += 1
n += 3
return -1
这样可以节省引入布尔标志和避免代码重复的工作。
我返回-1
而不是0
,因为0
可能是密码子的实际索引(如果密码子位于序列的开头)。
答案 2 :(得分:0)
您搜索终止密码子,如果找到它,它会过早地退出循环。
但是否则,它运行完整的循环,在n == len(seq)
时退出循环,然后仍然打印计数。
两种解决方案:
只有在找到终止密码子时打印:
count1 = 0
n = 1
while n < len(seq):
if seq[n:n+3] in stop_codons:
print count1
break
count1 += 1
n += 3
或设置stopped
标志:
count1 = 0
n = 1
stopped = False
while n < len(seq):
if seq[n:n+3] in stop_codons:
stopped = True
break
count1 += 1
n += 3
if stopped:
print count1
答案 3 :(得分:0)
seq="TCATTCTaTTTAAAAAAatATAAAaGGGgTTTTGGGgTTTtGGGGTTTtGGGG"
stop_codons = ["TAG", "TAA"]
def printcount(seq, stop_codons, start):
found = False
count = 0
n = start
while n < len(seq):
if seq[n:n+3] in stop_codons:
found = True
break
count += 1
n += 3
print count if found else 0
printcount(seq, stop_codons, 0)
printcount(seq, stop_codons, 1)
printcount(seq, stop_codons, 2)
答案 4 :(得分:0)
此代码将遍历您的序列并在找到TAA或TAG序列返回终止密码子的第一个字符的位置时停止
seq="TCATTCTaTTTAAAAAAatATAAAaGGGgTTTTGGGgTTTtGGGGTTTtGGGG"
list = ["z", "z", "z"] # otherwise the list will not be of 3 characters
i = 0
for letter in seq:
list.pop(0)
list.append(letter)
codon = "".join(list)
i = i + 1
if codon == "TAG" or codon == "TAA":
print i - 2 # to print the position of T
break
答案 5 :(得分:0)
帮助自己,不要重新发明轮子,特别是BioPython免费提供并广泛使用时。