Python中的奇怪行为

Seb*_*ido -3 python list

我写了一个简单的程序,将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)

为什么会发生这种奇怪的行为,我该如何解决?

Gar*_*tty 7

你要做的事情比必要的要困难得多,这可以很容易地使用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()改为使用.