2016-03-23 25 views
0

error showed辞書をループしているときにキーエラーが発生しています。誰かが私に間違っていることを教えてもらえると助けになるでしょう。私は基本的な「シーザー暗号」、13 :)Python辞書のキーエラー

ceasar = {'a':'n', 'b':'o', 'c':'p', 'd':'q', 'e':'r', 'f':'s', 'g':'t', 'h':'u', 'i':'v', 'j':'w', 'k':'x', 'l':'y', 'm':'z', 'n':'a', 'o':'b', 'p':'c', 'q':'d', 'r':'e', 's':'f', 't':'g', 'u':'h', 'v':'i', 'w':'j', 'x':'k', 'y':'l', 'z':'m'} 
def ceasar_cipher(encoded): 
    encoded = encoded.lower() 
    decoded = "" 
    for letter in encoded: 
     if letter == "?" or letter == "!": 
      decoded += letter 
    for letter in encoded: 
     ceasar[letter] += decoded 
     print decoded 
+1

あなたは何を関数と呼んでいますか?私は、単語にスペースがあり、あなたの参照辞書に '' 'がないと仮定しています。したがって、キーエラーです。 – AChampion

+0

最初の割り当てを 'encoded = encoded.lower()。strip()'に変更してみてください – Bahrom

+0

fyi、Pythonには[キーが13のCaeer Cypher]が含まれています(https://docs.python.org/2/library/ codecs.html#python-specific-encodings): 'インポートコーデック。 (codecs.encode(message、 'rot_13')) ' – RoadieRich

答えて

0
ここ

別のアプローチがあります、あなたは私たちにいくつかのサンプル入力と出力を与えることができるのオフセットを持つメッセージをデコードする方法を作るしようとしていますか?あなたはシーザーの辞書にない文字をどうするかをしたいですか:

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

def caesar_cipher(encoded): 
    print("".join(caesar.get(letter, letter) for letter in encoded.lower())) 
+1

' caesar.get(letter、letter) 'は、'〜の中のif letter 'を不要にします。 – AChampion

+0

良い点@ACampionありがとう!私は後でそれを追加して、最初のチェックを外すのを忘れてしまった。 – Bahrom

+1

は問題を修正し、 '.lower()'を追加しました – AChampion

0

私はあなたがこれは、スペース、句読点、およびではない他の文字を保存し

ceasar = {'a':'n', 'b':'o', 'c':'p', 'd':'q', 'e':'r', 'f':'s', 'g':'t', 'h':'u', 'i':'v', 'j':'w', 'k':'x', 'l':'y', 'm':'z', 'n':'a', 'o':'b', 'p':'c', 'q':'d', 'r':'e', 's':'f', 't':'g', 'u':'h', 'v':'i', 'w':'j', 'x':'k', 'y':'l', 'z':'m'} 
def ceasar_cipher(encoded): 
    encoded = encoded.lower() 
    decoded = "" 
    for letter in encoded: 
     if letter in ceasar.keys(): 
      decoded += ceasar[letter] 
     else: 
      decoded += letter 
    print decoded 

をしたいと思います翻訳辞書。