DNAをRNAに翻訳する簡単なプログラムを書きました。基本的に、文字列を入力すると、文字列が文字に分割されてリストに送信され、文字がシフトされ、結果のリストから文字列が返されます。このプログラムは、a を u に、そして to を 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)
ここで、要素を反復するのではなく、位置を反復してプログラムを変更するだけで、期待どおりに機能します。結果のコードは次のとおりです。
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)
この奇妙な動作が発生するのはなぜですか?どうすれば解決できますか?