2016-01-12 4 views
-2
def encrypt(text, key, direction): 
    if direction == 1: #The direction is either -1, or 1. If it is 1, it goes right. Otherwise, it will go left. 
     emptys='' 
     for x in text: 
      b = ord(x) #b is the individual characters after the ord() function 
      b+=key 
      if b<=122: 
       n = chr(b) #n is the converted letter of the encrypted ASCII number 
       emptys+=n 
      else: 
       o=b-90 
       q=chr(o) 
       emptys+=q 
     return emptys 
    else: 
     emptys='' 
     for x in text: 
      b = ord(x) #b is the individual characters after the ord() function 
      b=b-key 
      if b>=32: 
       n = chr(b) #n is the converted letter of the encrypted ASCII number 
       emptys+=n 
      else: 
       o=b+90 
       q=chr(o) 
       emptys+=q 
     return emptys 
+5

Вы должны отформатировать свой код, но также: если с этим кодом нет проблем, он не принадлежит к переполнению стека. Для улучшений ** и при условии, что этот код работает **, вы можете захотеть испытать удачу в [Обзор кода] (http://codereview.stackexchange.com/). –

+0

Ваш код слишком длинный, имена переменных слишком короткие и недостаточно пробелов между символами. Вы должны иметь возможность довести до половины строк путем реорганизации переменных, которые вы используете только один раз –

ответ

0

Ваш код как написано blithely переводит символы алфавита в не-буквенный и наоборот (например, encrypt('abc', 25, 1) получает 'z!"'). Поэтому большинство определений традиционного шифра Цезаря ошибочно, что должно только изменять алфавитные символы и вращать их внутри алфавита.

Сказали, что получить это право легче, чем вы его делаете. Наилучший подход заключается в том, чтобы избежать поворота собственного кода вращения. Python уже предоставляет действительно хороший способ сделать индивидуальные сопоставления символов, str.translate. Например:

from string import ascii_letters, ascii_uppercase, ascii_lowercase 

def encrypt(text, key, direction): 
    # direction == -1 is trivially converted to direction == 1 case 
    if direction == -1: 
     key = 26 - key 

    # On Py2, you'd use the string module's string.maketrans instead of 
    # str.maketrans 
    trans = str.maketrans(ascii_letters, ascii_lowercase[key:] + ascii_lowercase[:key] + ascii_uppercase[key:] + ascii_uppercase[:key]) 

    return text.translate(trans)