2016-04-04 10 views
2

辞書を使用してランダムな文字列をエンコードして遊んできました。私が望む文字を置き換えるコードを手に入れましたが、実際には文字列の文字を一度置き換えるだけで、文字を複数回置き換えることがあります。私は、関数を使用テスト目的のために文字列のエンコーダ - Python

def encode(msg,code): 
    for i in msg: 
     for i in code: 
      msg = msg.replace(i, code[i]) 
     return msg 

呼び出し:これは私が持っているものである 初期:

encode("blagh", {"a":"e","h":"r"}) 

と、より複雑な文字列:二番目の右のため

encode("once upon a time",{'a':'ae','e':'ei','i':'io','o':'ou','u':'ua'}) 

上記の出力を探しています: 'ouncei uapoun ae tiomei'

代わりにして自分自身を発見しています:

「ounceio uapoun aeio tiomeio」

どのように私は一度だけ、各文字を置き換えるには、私のループを制限することができますか?

+0

http://stackoverflow.com/questions/21038891/what-does-table-the-string- translate-function-平均 –

答えて

1

のPython 3のstr.translate関数が何をしたいん。関数が適切なフォーマットに変換する辞書の理解を使用していますので、翻訳辞書は、キーのUnicode序を使用しなければならないことに注意してください:

def encode(msg,code): 
    code = {ord(k):v for k,v in code.items()} 
    return msg.translate(code) 

print(encode("blagh", {"a":"e","h":"r"})) 
print(encode("once upon a time",{'a':'ae','e':'ei','i':'io','o':'ou','u':'ua'})) 

出力:それは、同様のPython 2で動作

blegr 
ouncei uapoun ae tiomei 

あなたがUnicode文字列を使用するか、デフォルトでは文字列のUnicodeを作るために、ファイルの先頭に以下を追加した場合:

from __future__ import unicode_literals 
1

代わりのstr.replaceを使用して、文字で文字を置き換える:

def encode(msg, code): 
    result = '' 
    for ch in msg: 
     result += code.get(ch, ch) 
    return result 

generator expressionを使用する:

def encode(msg, code): 
    return ''.join(code.get(ch, ch) for ch in msg)