2014-02-10 3 views
1

Мне нужно написать зашифрованный текст слов python, hacker и wow и на расстоянии 3, используя шифр Цезаря в Python, который не включает использование raw_input. Это то, что у меня есть до сих пор, но я продолжаю получать сообщение об ошибке, и я не уверен, как это исправить.Цезарный шифр Шифрование

>>> plainText = input("python: ") 
python: distance = int(input("3: ")) 
>>> code = "" 
>>> for ch in plainText:  
     ordValue = ord(ch) 
     cipherValue = ordValue + distance 
     if cipherValue > ord('z'):  
     cipherValue = ord('a') = distance - \     
     (ord('z') - ordValue + 1)   
SyntaxError: can't assign to function call 
+1

Что вы хотите 'CipherValue = Ord ('а') = расстояние - (ORD ('г') - ordValue +«) 'до * значит *? Потому что это ошибка. –

+0

Я действительно не уверен быть честным, я следовал примеру в книге – user3292818

+0

Если это буквальный код в книге, у вас плохо отредактированная книга. –

ответ

1

Вы, кажется, введя этот код в интерактивном режиме, а не сохранять его как файл и запустить его. Если это так, тогда, когда вы используете input, в окне выдается запрос на ввод, прежде чем вы сможете продолжать вводить код.

plainText = input("python: ") 

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

distance = int(input("3: ")) 

И вы должны ввести расстояние, которое вы хотите, прежде чем начать на следующей строке, code = "".

Как стилистический совет, я предлагаю изменить текст подсказки от "python:" и "3:" к чему-то вроде «текст для шифрования:» и «расстояние:», поэтому для пользователя очевидно, что он должен вводить.


Далее, у вас есть ошибки отступа здесь:.

if cipherValue > ord('z'):  
    cipherValue = ord('a') = distance - \  

линии после if условия должны быть отступом один уровень дальше в

if cipherValue > ord('z'):  
     cipherValue = ord('a') = distance - \  

Далее, вы имеют две проблемы в этих строках.

cipherValue = ord('a') = distance - \ 
    (ord('z') - ordValue + 1) 
  • Вы не должны иметь каких-либо пробелов после символа продолжения строки \. В любом случае, может быть, лучше всего написать все выражение на одной строке, так как линия на самом деле не достаточно длинная, чтобы требовать разбиения на две строки.
  • Второй знак равенства - это опечатка. Это должен быть знак плюса.

-

cipherValue = ord('a') + distance - (ord('z') - ordValue + 1) 

На данный момент, ваша программа должна работать без каких-либо ошибок, но это еще не производит никакой продукции. Когда вы шифруете каждый символ, добавьте его в code. Затем распечатайте его после окончания цикла.

plainText = input("text to encrypt: ") 
distance = int(input("distance: ")) 
code = "" 
for ch in plainText:  
    ordValue = ord(ch) 
    cipherValue = ordValue + distance 
    if cipherValue > ord('z'):  
     cipherValue = ord('a') + distance - (ord('z') - ordValue + 1) 
    code = code + chr(cipherValue) 
print(code) 
#to do: write this to a file, or whatever else you want to do with it 

Здесь chr преобразует цифровой cipherValue в его эквивалент буквы.


Результат:

text to encrypt: hacker 
distance: 13 
unpxre 
0

Вашей ошибкой является вторым присваивания '=' в последней строке цикла for. Это должен быть знак добавления +.

Попробуйте это:

plainText = input("Enter text to encrypt: ") 
distance = int(input("Enter number of offset: ")) 
code = "" 
for ch in plainText: 
    ordValue = ord(ch) 
    cipherValue = ordValue + distance 
    if cipherValue > ord('z'): 
     cipherValue = ord('a') + distance - \ 
      (ord('z') - ordValue + 1) 
    code = code + chr(cipherValue) 
print(code) 
Смежные вопросы