2014-03-26 95 views
1

不能想出如何用數字替換字母。例如,用python中的數字替換單詞中的多個字母?

可以說

 'a' , 'b' and 'c' should be replaced by "2". 
    'd' , 'e' and 'n' should be replaced by "5". 
    'g' , 'h' and 'i' should be replaced by "7". 

我想替換的字符串是again。我想要得到的輸出是27275。 這些數字的結果應該是字符串。

到目前爲止我有:

def lett_to_num(word): 
    text = str(word) 
    abc = "a" or "b" or "c" 
    aef = "d" or "e" or "n" 
    ghi = "g" or "h" or "i" 
    if abc in text: 
     print "2" 
    elif aef in text: 
     print "5" 
    elif ghi in text: 
     print "7" 

^我知道上面是錯誤的^

我應該寫什麼功能?從串

+1

你認爲你應該寫什麼函數?顯示一點點努力,然後我們會更可能幫助你 – hd1

+0

爲什麼'n'是'5'? – jfs

+0

這只是一個例子。所以我可以再拼出'再'一詞。 – user3463010

回答

10

使用maketrans:

from string import maketrans 
instr = "abcdenghi" 
outstr = "222555777" 
trans = maketrans(instr, outstr) 
text = "again" 
print text.translate(trans) 

輸出:

27275 

從字符串模塊maketrans給出了從INSTR到outstr字節映射。當我們使用translate時,如果找到instr中的任何字符,它將被來自outstr的對應字符替換。

+0

也許在python3.x中提到這是一個字符串方法'str.maketrans'。 – msvalkon

+0

它適用於python 2.7 ...我已經在python 2.7中測試過。 – user3

+0

不,在python 2.7中,你將不得不'從字符串導入maketrans',因爲在python 3.x中,任何字符串都有'maketrans'方法:''一個字符串「.maketrans()'。 – msvalkon

2

這取決於。既然看起來你在學習,我會避免使用庫的高級用法。一種方法是如下:

def lett_to_num(word): 
    replacements = [('a','2'),('b','2'),('d','5'),('e','5'),('n','5'),('g','7'),('h','7'),('i','7')] 
    for (a,b) in replacements: 
     word = word.replace(a,b) 
    return word 

print lett_to_num('again') 

另一種方式是接近你試圖在你在你的問題顯示的代碼做:

def lett_to_num(word): 
    out = '' 
    for ch in word: 
     if ch=='a' or ch=='b' or ch=='d': 
      out = out + '2' 
     elif ch=='d' or ch=='e' or ch=='n': 
      out = out + '5' 
     elif ch=='g' or ch=='h' or ch=='i': 
      out = out + '7' 
     else: 
      out = out + ch 
    return out 
0

如何:

>>> d = {'a': 2, 'c': 2, 'b': 2, 
     'e': 5, 'd': 5, 'g': 7, 
     'i': 7, 'h': 7, 'n': 5} 

>>> ''.join(map(str, [d[x] if x in d.keys() else x for x in 'again'])) 
'27275' 
>>> 
>>> ''.join(map(str, [d[x] if x in d.keys() else x for x in 'againpp'])) 
'27275pp' 
>>>