Skip to main content
 首页 » 编程设计

python之反转字母表

2025年05月04日12dyllove98

我正在尝试修改一段文本以应用以下翻译:

before: abcdefghijqlmnopqrstuvwxyz 
after:  zyxwvutsrqponmlkjihgfedcba 

即每个a都变成了一个z;每个 b 变成一个 y;每个 c 变成一个 x;等等。

我的脚本:

myInput = input("Entrer une chaine de caracteres:\n\n") 
myInputSansEspace = myInput.replace(" ", "") 
 
myInputAsciiInverse = myInputSansEspace.replace("a","z").replace("b","y").replace("c","x").replace("d","w").replace("e","v").replace("f","u").replace("g","t").replace("h","s").replace("i","r").replace("j","q").replace("k","p").replace("l","o").replace("m","n").replace("n","m").replace("o","l").replace("p","k").replace("q","j").replace("r","i").replace("s","h").replace("t","g").replace("u","f").replace("v","e").replace("w","d").replace("x","c").replace("y","b").replace("z","a") 
 
print(myInputAsciiInverse) 

不幸的是,它不起作用。例如,如果我写:

i am noob

返回应该是:

rznmlly

因为 i 被替换为 r; a by z; m by n;等等

我得到的结果是:

boonmai

请您参考如下方法:

你的方法有副作用,所以不会做你想做的事。
进行第一次替换:

'a...z'.replace('a', 'z') == 'z...z' 

现在考虑最后一个替换:

'z...z'.replace('z', 'a') == 'a...a' 

因此最终只有一半的字母表。

您可以简单地用reverse 或切片替换所有的replace:

'abc..xyz'.reverse() == 'zyx..cba' 
'abc..xyz'[::-1] == 'zyx..cba' 

如果您尝试将翻译作为一种密码手段,那么您可以使用 str.maketrans 和 str.translate,例如:

>>> alphabet = 'abcdefghijklmnopqrstuvwxyz' 
>>> trans = str.maketrans(alphabet, alphabet[::-1], ' ') 
>>> noob = 'I am noob' 
>>> noob.lower().translate(trans) 
'rznmlly' 

注意:alphabet等同于string.ascii_lowercase

以上基本上等同于:

>>> import string 
>>> trans_table = dict(zip(string.ascii_lowercase, string.ascii_lowercase[::-1])) 
>>> ''.join(trans_table.get(c, c) for c in noob.lower() if c not in ' ') 
'rznmlly'