3

辞書を使用して文字置換について調査しましたが、コードを正しく動作させることができません。私のコードは次のようになります。

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

ここで、コードを実行すると:

code = {'e':'x','x':'e'}
msg = "Jimi Hendrix"
encode(code,msg)

「Jimi Hxndrie」ではなく「Jimi Hxndrix」と表示されます。文字「x」を「e」に置き換えるにはどうすればよいですか?

4

5 に答える 5

7

str.translate以下を参照または実行できます。

''.join(code.get(ch, ch) for ch in msg)
于 2012-11-29T13:25:38.283 に答える
2

とを使用maketranstranslateます。

from string import maketrans
msg.translate(maketrans(''.join(code.keys()), ''.join(code.values())))
于 2012-11-29T13:25:32.367 に答える
0

問題は、メッセージではなくコードを反復することです

msgの反復は、Jon Clements のプログラムで行われていることであり、次のようにより明示的に記述できます。

print ''.join(code[ch] if ch in code else ch for ch in msg)
于 2012-11-29T13:28:10.783 に答える
0

x と e を交換しています。以前の編集を上書きしています。

古い文字列から新しい文字列 (または、Kalle が指摘したように、文字列は「不変」/編集不可であるため、文字の配列) にコピーして、既に置き換えた文字を上書きしないようにする必要があります。

def encode(code, message):
    encoded = [c for c in message]
    for i, c in enumerate(message):
        try:
            encoded[i] = code[c]
        except KeyError:
            pass
    return ''.join(encoded)

他の答えは、このようなことを行うライブラリ関数ですが、どこが間違っているのか説明していません。

于 2012-11-29T13:28:20.950 に答える
0
     python 3.2
     use your own code it is ok.

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

       ##  str.replace(old,new,[,count])
      so when you loop in your code = {'e':'x','x':'e'}
      first it gets the key "x" then the key "e" because dict is not ordered
      so,  "Hendrix" turns into "Hendrie" then "Hendrie" turns into Hxndrix and
     you are not having your result. but if you add 1 in your code
      msg.replace(k,code[k],1) then it only will replace one letter per loop and you                                    
      have your result Try.
于 2012-11-29T16:46:02.453 に答える