2015-05-07 7 views
-1
def encrypt(string, new_string): 
    i = 0 
    if i < len(string): 
     if ord(string[i]) > 65 and ord(string[i]) < 97: 
      new_string = string[i] + encrypt(string[1:], new_string) 

     if ord(string[i]) >= 97 or ord(string[i]) == 32: 
      if not(ord(string[i])) == 32: 
       x = ord(string[i]) 
       x = x + 1 
       y = chr(x) 
       new_string = new_string + y 

       new_string = encrypt(string[1:], new_string) 

      else: 
       new_string = new_string + ' ' 
       new_string = encrypt(string[1:], new_string) 
    return new_string 

string = input("Enter a message: \n") 
new_string = '' 


print("Encrypted message:") 
print(encrypt(string, new_string)) 

Если есть больше чем одна заглавная буква, она будет выводить прописные буквы в передней части зашифрованного сообщения.Я хочу зашифровать строчные символы в сообщении, изменив каждую букву на следующую букву. Например; «А» становится «Ъ» и «ч» становится «я»

Например: «Hello World» становится «HWfmmp psme». Тем не менее, вывод должен быть «Hfmmp Xpsme»

+2

Ожидаемый вывод '' Hfmmp Xpsme'' должен быть '' Hfmmp Wpsme''? –

ответ

0
>>> import re 
>>> re.sub('[a-z]',lambda x:chr(ord(x.group(0))+1),'Hello World') 
'Hfmmp Wpsme' 
>>> 
1

translate может помочь вам сделать этот вид преобразования.

from string import ascii_lowercase 

def encrypt(data): 
    transmap = str.maketrans(ascii_lowercase, ascii_lowercase[1:] + ascii_lowercase[0]) 
    return data.translate(transmap) 

value = 'Hello World' 
print(encrypt(value)) 

Результат Hfmmp Wpsme.


Это легко изменить функцию encrypt для работы с гибким смещением.

from string import ascii_lowercase 

def encrypt(data, offset=1): 
    transmap = str.maketrans(ascii_lowercase, ascii_lowercase[offset:] + ascii_lowercase[0:offset]) 
    return data.translate(transmap) 

value = 'Hello World' 
print(encrypt(value, offset=2)) 
print(encrypt(value, offset=-1)) 

Это будет печатать Hgnnq Wqtnf и Hdkkn Wnqkc.