2016-03-23 32 views
0

error showed Bir sözlükte dolaşmaya çalışırken önemli bir hatayla karşılaşıyorum. Birisi bana yanlış yaptığımı söyleseydi, yardımcı olur. Ben temel "Sezar şifre", 13. :)Python sözlük '' anahtar hatası

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

Bu işlevi neden arıyorsunuz? Kelimenin geçtiği bir boşluk olduğunu ve arama hatalarınızda '' '' sezonu '' var '' diye farz ediyorum - bu yüzden anahtar hata. – AChampion

+0

İlk ödevinizi 'encoded = encoded.lower() olarak değiştirmeyi deneyin. Strip()' – Bahrom

+0

fyi, Python bir [13 tuşu olan bir caeser cypher] içerir (https://docs.python.org/2/library/ codecs.html # python özgü kodlamalar): 'codec bileşenlerini içe aktarma; print (codecs.encode (message, 'rot_13')) – RoadieRich

cevap

0
İşte

başka bir yaklaşım, bize bazı örnek giriş ve çıkış verebilir uzaklığındaki mesajları deşifre etmenin bir yolunu yapmaya çalışıyorum?

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)' 'harfinde '' gereksiz yapar. – AChampion

+0

İyi nokta @ Achampion teşekkürler! Bunu daha sonra düzenlemeyi ekledim ve ilk kontrolü almayı unuttum. – Bahrom

+1

bir paren sorunu düzeltildi ve '.lower()' – AChampion

0

Sana

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 

Bu boşluk, noktalama ve olmayan herhangi bir başka karakter korur istediğini düşünüyorum: Eğer Sezar dict olmayan karakterler ile yapmak istiyorsun çeviri dict.

İlgili konular