我试图编写一些识别序列中终止密码子的代码。我编写了以下代码,但是当我尝试它时,它会在我提示输入序列后停止。我不确定为什么它没有通过。非常感谢!
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
答案 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;并有助于防止在不太高级的语言中常见的大量错误。