2014-11-22 139 views
0

對不起,如果這之前已經問過,我看了也找不到它。替換字符串上的字符

我被要求做一個算法來改變一個字符串上的字符。這裏有一個例子:

ABC

高清

我想機會,每一個 'a' 到 'd',每個 'D' 到 'A',每個 'B' 到 'E',每個'e'到'b'等等。所以如果我的輸入是「abc def」,我的輸出是「def abc」。

我想:

def change(string, dic): 
    for i, c in dic.iteritems(): 
     string = string.replace(i, c) 
    return string 

dic = {'a':'d','b':'e','c':'f', 
     'd':'a','e':'b','f':'c'} 

string = 'abc def' 

print change(string,dic) #returns abc abc 

我沒想到蟒蛇會檢查字符串兩次,每次字符(如果這是發生了什麼)。

我試過的一切都不起作用,你們能給我一些建議嗎?

謝謝。

+0

代碼不編譯。 'j' - >'c' – keyser 2014-11-22 17:03:07

+1

問題是,當您將'a'改爲'd'時,當您將'd'改爲'a'時,它也會被改回。這也是整個練習的重點。你可以通過調試打印一些東西來輕鬆實現這一點,例如change()中的'string'。 – keyser 2014-11-22 17:04:56

+0

這聽起來是家庭作業-y,所以我只給你一個提示;運行'替換'一堆將迭代通過字符串一堆。也許你不想多次遍歷它。 – gcarvelli 2014-11-22 17:07:47

回答

2

str.translate方法,這個確切的工作:

>>> import string 
>>> t = string.maketrans("abcdef", "defabc") 
>>> "abc def".translate(t) 
'def abc' 

string.maketrans(從,到)返回合適的轉換表 傳遞給翻譯(),將每個字符映射從中進入 字符處於同一位置;從和到必須具有相同的長度 。

string.translate(S,表[,deletechars])刪除從s 是在deletechars(如果存在的話)的所有字符,並且然後使用表平移 字符,它必須是一個256個字符的字符串給每個字符值賦予 ,由它的序號索引。如果 表爲無,則僅執行字符刪除步驟。

0

您可以使用字典中的get方法。第一個參數是檢查的關鍵,第二個參數是在找不到鍵時使用的值。因此,如果找到該鍵,則交換相應的字典值,否則保留原始字符。所以用這種方式迭代所有的字母,結果就是join,那就是你的答案。

def change(string, dic): 
    return ''.join(dic.get(i,i) for i in string) 

>>> string = 'abc def' 
>>> d = {'a':'d', 'b':'e', 'c':'f', 'd':'a', 'e':'b', 'f':'c'} 
>>> change(string, d) 
'def abc' 
0

這適用於Python 3中,不知道「性格在DIC」已被改變爲Python 2

def change(string, dic): 
    string_new = "" 
    for character in string: 
     if character in dic: 
      string_new = string_new + dic[character] 
     else: 
      string_new = string_new + character 
    return string_new