2016-04-19 5 views
0

Итак, я пропустил класс и стараюсь выполнять работу, которую они там делали. Одной из проблем было исправление шифрования цеесера. Я считаю, что я исправил все, за исключением последней части, которая, конечно же, является частью, на которой я застрял. Это то, что у меня есть.Как определить расшифровку шифрования caeser

#Change to T to lowercase in plaintext 
#add : to the end of if statement  
def encrypt(plaintext, alphabet, key):  
     plaintext = plaintext.lower() 
     cipherText = "" 
     for ch in plaintext: 
      idx = alphabet.find(ch) 
      if idx >= 0 and idx <= 25: 
       cipherText = cipherText + key[idx] 
      else: 
       cipherText = cipherText + ch 
       #add return ciphertext 
     return cipherText 
#add def to decrypt line 
def decrypt(cipherText, alphabet, key): 
     plainText = "" 
     for ch in cipherText: 
      idx = key.find(ch) 
      #add and idx <= 25 to if statement 
      if idx >= 0 and idx <= 25: 
       plaintext = plaintext + alphabet[idx] 
      else: 
       plaintext = plaintext + ch 
     return plaintext 
#got rid of def main 
#have myCipher = encrypt 
# define both myCipher and my plain to the encrypt and decrypt 
alphabet = "abcdefghijklmnopqrstuvwxyz" 
key = "nopqrstuvwxyzabcdefghijklm" 
plaintext = input("Enter the text you want to encrypt: ") 
myCipher = encrypt(plaintext, alphabet, key) 
myPlain = decrypt(cipherText,alphabet, key) 


print(myCipher) 
print("Checking if decryption works: ") 
print(myPlain) 

Когда я запускаю код он говорит шифртекст, не определен в

myPlain = decrypt(cipherText,alphabet, key) 

Я попытался несколько различных вариантов, но я, кажется, иду дальше от ее фиксации, чем то, что он у меня, как сейчас , Таким образом, я могу определить cipherText в этой строке или мне нужно переделать эту строку и изменить ее на что-то еще?

Это ошибка, я получаю, когда я попытался изменить зашифрованный текст, как LalolDublin предложил

Traceback (most recent call last): 
    File "C:\Users\David\Downloads\caeser (2).py", line 32, in <module> 
    myPlain = decrypt(myCipher ,alphabet, key) 
    File "C:\Users\David\Downloads\caeser (2).py", line 21, in decrypt 
    plaintext = plaintext + alphabet[idx] 
UnboundLocalError: local variable 'plaintext' referenced before assignment 
+0

смотрите ближе к тому, как и где вы возвращаете свой зашифрованный текст, и ответ будет очевидным. – LaloInDublin

+0

Хорошо, я пытаюсь понять, что вы подразумеваете под этим. Я смотрю на это, но это не так очевидно для меня. Мое единственное предположение заключалось в том, что вы хотите изменить mycipher для расшифровки (шифрования), но я попробовал это, и это тоже не была принятая функция. – David

+0

Я дам ему попробовать. Я не знаю, что такое python, но я направлял вам имена переменных, проверяю ответ Im posting, и если он работает, пожалуйста, примите его. – LaloInDublin

ответ

1

вы не можете использовать шифртекст, это локальный переменный только в пределах этой функции ...

myCipher = encrypt(plaintext, alphabet, key) 
myPlain = decrypt(myCipher ,alphabet, key) 
+0

@LalolnDublin Да, я пробовал это в какой-то момент, но столкнулся с ним другая ошибка. 'Код' Traceback (самый последний вызов последнего): Файл "C: \ Users \ David \ Downloads \ Caeser (2) .py", строка 32, в myPlain = расшифровка (myCipher, алфавит, ключ) Файл «C: \ Users \ David \ Downloads \ caeser (2) .py», строка 21, в расшифровке plaintext = plaintext + alphabet [idx] UnboundLocalError: локальная переменная 'plaintext', на которую ссылаются перед присвоением 'code' – David

+0

Я извините, что я стараюсь ввести это как код, чтобы вы могли видеть его более четко, и я потерпел неудачу, поэтому я добавлю его в OP в конце – David

0

Хорошо, поскольку LalolnDublin заявил, что мне нужно поставить myCipher вместо cipherText, он был прав, но мне также нужно было изменить положение, в котором я ввел код, чтобы он мог нормально работать. Это готовый продукт, если у кого-то есть аналогичная проблема, как я здесь.

key = "nopqrstuvwxyzabcdefghijklm" 
plainText = input("Enter the text you want to encrypt: ") 
alphabet = "abcdefghijklmnopqrstuvwxyz" 
def encrypt(plainText, key, alphabet): 
     plainText = plainText.lower() 
     cipherText = "" 
     for ch in plainText: 
      idx = alphabet.find(ch) 
      if idx >= 0 and idx <= 25: 
       cipherText = cipherText + key[idx] 
      else: 
       cipherText = cipherText + ch 
     return cipherText 
myCipher = encrypt(plainText, key, alphabet) 
def decrypt(myCipher, plainText, alphabet, key): 
     plainText = "" 
     for ch in myCipher: 
      idx = key.find(ch) 
      if idx >= 0 and idx <=25: 
       plainText = plainText + alphabet[idx] 
      else: 
       plainText = plainText + ch 
     return plainText 
myPlain = decrypt(myCipher, plainText, alphabet, key) 



print(myCipher) 

print("Checking if decryption works: ") 

print(myPlain)