2014-08-27 94 views
1

當我運行這與輸入「ABC」,只會打印「F」,而不是「高清」,我想不通爲什麼...幫助凱撒密碼:如何從字典中打印*所有*輸入字母?

code = raw_input("Enter your code: ") 

translation = {"a": "d", "b": "e", "c": "f", "d": "g", "e": "h", "f": "i", "g": "j", "h": "k", "i": "l", "j": "m", "k": "n", "l": "o", "m": "p", "n": "q", "o": "r", "p": "s", "q": "t", "r": "u", "s": "v", "t": "w", "u": "x", "v": "y", "w": "z", "x": "a", "y": "b", "z": "c"} 

lettered_code = list(code) 

def translate(lettered_code): 
    for letters in lettered_code: 
     newanswer = translation[letters] 
    return newanswer 

print translate(lettered_code) 

回答

0

你只能回到過去的翻譯,您每次迭代都會輸入newanswer = translation[letters],因此您只能看到最後一個。

每一個新的字符添加到字符串:

def translate(lettered_code): 
    new_answer = "" # set variable outside the for loop to an empty string 
    for letters in lettered_code: 
     new_answer += translation[letters] # add each translated letter to new_answer 
    return new_answer # return all joined letters 

你不需要lettered_code = list(code),你可以通過遍歷字符串直接使剛及格code給你的函數。

您也可以使用join和創建轉換字符的列表,並將它們連接成單個字符串list comprehension

def translate(lettered_code): 
    "".join([translation[letters] for letters in lettered_code ]) 
+0

爲什麼你只是把兩個引號等於newanswer? – Merg 2014-08-27 23:28:37

+0

這是一個空字符串,你每次通過你的循環添加到那個空字符串 – 2014-08-27 23:29:20

+0

哦!非常感謝。 <3 – Merg 2014-08-27 23:46:29

-1

你早回來,你要

def translate(lettered_code): 
    return [translation[letter] for letter in lettered_code] 
+0

這會返回一個列表,而不是一個字符串。如果你想使用comprehensions,你可以做'''.join(在[lettered_code]中的字母翻譯[letter]),它返回一個字符串並避免創建額外的列表。 – Hamatti 2014-08-27 23:31:57