确定终止密码子

时间:2017-03-14 18:48:09

标签: python dna-sequence

我试图编写一些识别序列中终止密码子的代码。我编写了以下代码,但是当我尝试它时,它会在我提示输入序列后停止。我不确定为什么它没有通过。非常感谢!

dna=input("Please type your DNA sequence: ")

stopcodons=("TAG","TGA","TAA")
pos=0

while (pos+2)<(len(dna)):
    if dna[pos:pos+3] in stopcodons:
        type("Your sequence has a stop codon at %s position." %pos)
    else:
        pos=pos+3

3 个答案:

答案 0 :(得分:0)

如果找到一个位置,你的循环永远不会结束,因为你没有增加pos。 另外,我不确定为什么你增加3 pos。

while (pos+2)<(len(dna)):
    if dna[pos:pos+3] in stopcodons:
        type("Your sequence has a stop codon at %s position." %pos)
    pos=pos+1

应该更好用

答案 1 :(得分:0)

一旦找到终止密码子,你的程序进入无限循环的原因是因为你指示你的程序只增加pos(从而移动光标else案例:当你没有找到序列时。

因此,您每次都必须更新光标:

while (pos+2)<(len(dna)):
    if dna[pos:pos+3] in stopcodons:
        print("Your sequence has a stop codon at %s position." %pos)
    pos=pos+3

(甚至更好:使用pos += 3代替pos = pos + 3)。

您还必须使用print代替type,因为type只是获取对象的类型。

请注意,在range(..)循环中使用for通常更安全,例如:

for pos in range(0,len(dna),3):
    if dna[pos:pos+3] in stopcodons:
        print("Your sequence has a stop codon at %s position." %pos)

答案 2 :(得分:0)

你几乎从不想要使用计数器,或直接在Python中索引数组/字符串。

dna=input("Please type your DNA sequence: ")

stopcodons=("TAG","TGA","TAA")

for stopcodon in stopcodons:
    if stopcodon in dna:
        print("Your sequence has a stop codon at %s position" % dna.find(stopcodon))

以上是更多&#34; Pythonic&#34;并有助于防止在不太高级的语言中常见的大量错误。