2016-04-04 21 views
2

Sözlük kullanarak rasgele dizi dizelerinin kodlanmasıyla uğraştım. İstediğim harfleri değiştirmek için kodumu aldım, ancak bazı durumlarda bir karakteri bir kereden fazla değiştireceğim. Ben fonksiyonu kullanılır test amaçlıBir dize için kodlayıcı - Python

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

çağırır: Bu benim ne var başlangıç:

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

ve daha karmaşık bir dize: ikincisi hakkı için

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

yukarıda, aşağıdakilerin çıktısını arıyorum: 'ouncei uapoun ae tiomei'

ancak bunun yerine kendimi bulma kulüpler:

"ounceio uapoun aeio tiomeio"

nasıl sadece bir kez her bir karakteri yerine benim döngü sınırlandırabilir?

+0

http://stackoverflow.com/questions/21038891/what-does-table-the-string-: varsayılan olarak dizeleri Unicode yapmak için dosyanın üstüne aşağıdaki Unicode dizeleri kullanabilir veya eklerseniz tercüme-fonksiyonu- anlamına gelmek –

cevap

1

Python 3'ün str.translate işlevi istediğini yapar. fonksiyon doğru biçimine dönüştürmek için bir sözlük anlama kullanır böylece çeviri sözlük, anahtarlar için Unicode sıra sayılarını kullanmanız gerektiğini unutmayın:

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'})) 

Çıktı: O da Python 2'de çalışmaktadır

blegr 
ouncei uapoun ae tiomei 

from __future__ import unicode_literals 
1

yerine str.replace kullanmak yerine, karakter karakter değiştirin:

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

generator expression kullanma:

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