我写了一个简单的程序,将DNA翻译成RNA.基本上,您输入一个字符串,它将字符串分成字符并将它们发送到列表,移动字母并从结果列表中返回一个字符串.该程序正确地将a转换为u,并转换为a,但不将g转换为c,将c转换为g.
这是该计划:
def trad(x):
h=[]
for letter in x:
h.append(letter)
for letter in h:
if letter=="a":
h[h.index(letter)]="u"
continue
if letter=="t":
h[h.index(letter)]="a"
continue
if letter=="g":
h[h.index(letter)]="c"
continue
if letter=="c":
h[h.index(letter)]="g"
continue
ret=""
for letter in h:
ret+=letter
return ret
while True:
stry=raw_input("String?")
print trad(stry)
Run Code Online (Sandbox Code Playgroud)
现在,只是通过不迭代元素来改变程序,但是在位置上,它按预期工作.这是结果代码:
def trad(x):
h=[]
for letter in x:
h.append(letter)
for letter in xrange (0, len(h)):
if h[letter]=="a":
h[letter]="u"
continue
if h[letter]=="t":
h[letter]="a"
continue
if h[letter]=="g":
h[letter]="c"
continue
if h[letter]=="c":
h[letter]="g"
continue
ret=""
for letter in h:
ret+=letter
return ret
while True:
stry=raw_input("String?")
print trad(stry)
Run Code Online (Sandbox Code Playgroud)
为什么会发生这种奇怪的行为,我该如何解决?
你要做的事情比必要的要困难得多,这可以很容易地使用str.translate()- 一个str实例上的方法将一个字符的实例转换为另一个字符,这正是你想要的:
import string
replacements = string.maketrans("atgc", "uacg")
while True:
stry=raw_input("String?")
print stry.translate(replacements)
Run Code Online (Sandbox Code Playgroud)
这是2.x的答案,在3.x中,str.maketrans()改为使用.
| 归档时间: |
|
| 查看次数: |
126 次 |
| 最近记录: |