2015-05-07 35 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)) 

如果存在多於一個大寫字母,它會輸出在所述加密的消息的前部的大寫字母。我想通過將每個字母改爲下一個字母來加密郵件中的小寫字母。例如; 「A」變爲「B」和「h」變爲「i」的

例如:'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 WqtnfHdkkn Wnqkc

相關問題