2016-06-15 7 views
0

Я пишу в Python 3.4 и до сих пор запрограммирован так:Я строй Цезарь шифра для моего школьного проекта, и хотел бы знать, как дешифровка часть будет работать

plaintext = "" 
print ("Do you want to encrypt or decrypt a phrase?") 
answer = input("Type e for encrypt or d for decrypt and hit 'Enter'.").lower() 
if answer == ("e") or answer == ("encrypt"): 
    plaintext = input("Enter the phrase you would like to encrypt:") 
else: 
    print("I don't understand") 

shift = int(input("How many shifts would you like to make?") 

alphabet = "abcdefghijklmnopqrstuvwxyz" 
shiftedAlphabet = "jklmnopqrstuvwxyzabcdefghi" 
ciphertext = "" 


for eachletter in plaintext: 
    position = alphabet.index(eachletter) 
    shiftedLetter = shiftedAlphabet[position] 
    ciphertext = ciphertext + shiftedLetter 


print(ciphertext) 


if answer == ("d") or answer == ("decrypt") 
    ciphertext = input("Enter the phrase you would like to decrypt:" 
else: 
    print("mmmm okay") 

shiftedAlphabet - 

Я не знаю, как к запрограммируйте часть дешифрования (обратите внимание: я хотел бы, чтобы код был относительно простым и хотел бы, чтобы он был аналогичен приведенному выше).

+0

Код будет таким же, как шифрование, за исключением того, что вы просматриваете сдвинутый алфавит и заменяете соответствующую позицию в алфавите. – David

ответ

0

Цезарь шифры симметричны - вам просто нужно применить ту же логику в обратном направлении - найти индекс в зашифрованном тексте и получить, что индекс из обычного алфавита:

plain = '' 
for eachletter in cipertext: 
    position = shiftedAlphabet.index(eachletter) 
    shiftedLetter = alphabet[position] 
    plain = plain + shiftedLetter 
0

Так есть несколько вопросы с код, который вы уже разместили. Есть некоторые незначительные синтаксические ошибки, которые я могу игнорировать, но есть и некоторые логические ошибки.

Ваше второе приглашение пользователю спрашивает, сколько сдвигов они хотели бы сделать, но сдвинутый алфавит, который вы используете для своей программы, всегда сдвигается от 'a' до 'j'. Что произойдет, если использование переключится на 9?

С другой стороны, что происходит, когда исходный текст ввода имеет символ, который не находится в алфавите? Когда вы сделаете .index (каждый рассылку), он вернет -1. Как это приведет к тому, что ваш шифр будет вести себя?

Наконец, появляется ваш инструктор хотел бы иметь возможность нажать 'e' или 'd' в любое время, чтобы зашифровать или дешифровать, однако сейчас, если пользователь пытается расшифровать в начале, I don't understand печатается. Та же проблема с расшифровкой в ​​конце. Кроме того, вам, вероятно, придется попросить сдвиг, когда вы также расшифруете.

Мой последний совет - подумать о том, что такое шифр Цезаря. Вы просто вращаете буквы. Если вход a cat, а смена 2, вы получаете c ecv. Чтобы расшифровать, вам просто нужно повернуть каждую букву назад на ту же сумму, 2.

+0

Спасибо за предложения - я ценю это. Тем не менее, как включить код дешифрования и сдвига? –

+0

Код, который вы опубликовали, работает с использованием сдвинутого алфавита и индексов. Чтобы сделать эту работу на произвольном сдвиге, алфавит должен быть сдвинут на столько. Если вы подумаете об этом, сдвинув алфавит 3 влево, просто возьмите первые 3 символа алфавита и поместите их в спину. 'abcd ..... xyz' ->' def .... xyzabc'. Подумайте о сращивании строк и о том, как вы могли это сделать. –

+0

Кроме того, для дешифрования вы сделали бы то же самое со сдвинутым алфавитом, но вместо того, чтобы переместиться влево, вы переместились вправо: 'abc..xyz' ->' xyzabc ... uvw' , Я не собираюсь писать для вас код, потому что, насколько я могу судить, это ваше задание. Просто давая пищу для размышлений. –