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
-2
A
ответ
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)
Вы должны отформатировать свой код, но также: если с этим кодом нет проблем, он не принадлежит к переполнению стека. Для улучшений ** и при условии, что этот код работает **, вы можете захотеть испытать удачу в [Обзор кода] (http://codereview.stackexchange.com/). –
Ваш код слишком длинный, имена переменных слишком короткие и недостаточно пробелов между символами. Вы должны иметь возможность довести до половины строк путем реорганизации переменных, которые вы используете только один раз –