2015-05-10 4 views
2

Почему моя функция шифрования возвращает только первое переведенное письмо? (Я вырезал функцию дешифрования и грубой силы). Проблема, вероятно, небольшая, но я новичок в этом, и я слишком долго смотрел на нее, чтобы что-нибудь появилось в моей голове.Цезарный шифр, возвращающий только первое переведенное письмо?

import string 

def encrypt(message,key): 
    cryptotext="" 
    for character in message: 
     if character in string.uppercase: 
      old_ascii=ord(character) 
      new_ascii=(old_ascii+key-65)%26+65 
      new_char=chr(new_ascii) 
      cryptotext+=new_char 
      return cryptotext 

     elif character in string.lowercase: 
      old_ascii=ord(character) 
      new_ascii=(old_ascii+key-97)%26+97 
      new_char=chr(new_ascii) 
      cryptotext += new_char 
      return cryptotext 

     else: 
      return character 
+0

[Как создать Minimal, полный и проверяемый пример] (http://stackoverflow.com/help/mcve) это ты друг здесь, вы бы даже не должны задать вопрос, если вы будете следовать рекомендациям, данным там. –

ответ

0

Вы вводите операторы return внутри цикла. Это означает, что после первой итерации вы выходите из функции, и в результате вы получаете только один символ.

Ваш код должен выглядеть следующим образом:

cryptotext = "" 
for character in message: 
    # ... 
    # do the encryption, without returning 
    # ... 
return cryptotext # after the loop has finished 
1

The return выписки брейки из текущего цикла, что означает, что функция шифрования не должны ждать, пока после цикла для возврата: Также обратите внимание, что вы должны приложить символ, если он не является верхним или нижним регистром, или он просто вернет первую неправильную букву.
Так encrypt(message,key) должен выглядеть следующим образом:

def encrypt(message,key): 
    cryptotext="" 
    for character in message: 
     if character in string.uppercase: 
      old_ascii=ord(character) 
      new_ascii=(old_ascii+key-65)%26+65 
      new_char=chr(new_ascii) 
      cryptotext+=new_char 


     elif character in string.lowercase: 
      old_ascii=ord(character) 
      new_ascii=(old_ascii+key-97)%26+97 
      new_char=chr(new_ascii) 
      cryptotext += new_char 


     else: 
      #Also, append character to cryptotext instead of returning it 
      cryptotext+= character 
    return cryptotext 
+0

Я только что зарегистрировался, поэтому я не могу +1 вы, но вы мне очень помогли! Кажется, все работает! –

+0

Нет проблем. Рад, что смог помочь. @mkrieger имеет хороший ответ, он просто пропустил изменение 'return character' на' cryptotext + = character' – IronManMark20