2015-05-19 4 views
0
text='hijklqrs'  
def encrypt(shift_text,shift_amount, direction): 
    cipher_text=[] 
    for i in shift_text:      
     if direction is right:     
      cipher_text.append(text[(text.index(i) + shift_amount) % 26])  
     else: 
      cipher_text.append(text[(text.index(i) - shift_amount) % 26])   
    output = ''.join(cipher_text) 
    return output 

До сих пор это код, который я создал, однако проблема, с которой я сталкиваюсь, заключается в том, что мне нужно иметь возможность переносить текст влево или вправо в зависимости от параметр направления в моей функции. Я не уверен, как добавить код, который я хочу, чтобы сдвиг перемещался влево. Так, например, когда я принимаю h в функцию, а величина сдвига равна 2 и направление остается, возвращается f.добавить направление отправки символов в код шифрования python

+0

Не могли бы вы проверить, пожалуйста, ваш код отступы для 'функции encrypt'? –

+0

Код с отступом Я изменил оператор if, чтобы отразить то, что, по моему мнению, необходимо для правильного направления сдвига. Направление параметра, если оно отправлено справа, добавит сумму сдвига, иначе оно будет вычтено. –

ответ

0
def rotate(alphabet,shift): 
    return alphabet[shift:] + alphabet[:shift] 

print rotate("abcdefghijk",2) 

вы затем пару его с помощью словаря или string.transtab и перевести исходный текст с текстом сдвинутой

from string import maketrans,ascii_lowercase 
N = -13 #shift ammount (use negative for "left" and positive for "right") 
tab = maketrans(ascii_lowercase,rotate(ascii_lowercase,N)) 
encoded = "hello world".translate(tab) 
decode_tab = maketrans(rotate(ascii_lowercase,N),ascii_lowercase) 
decoded = encoded.translate(decode_tab) 
print encoded,"--->",decoded