0

rot13在 python 中有一个编码字符串,我必须对其进行解码:

"Gur dhvpx oebja sbk whzcrq bire gur ynml qbt"

可以在python中做吗?我找不到任何方法来做到这一点。

请帮忙!

这是我尝试过的:

s = "Gur dhvpx oebja sbk whzcrq bire gur ynml qbt"
s1 = ""
for i in range(len(s)):
    c = s[i]
    if c >= 'a' and c <= 'm': c += 13
    elif c > 'A' and c < 'M': c += 13
    elif c >= 'n' and c < 'z': c -= 13
    elif c >= 'N' and c <= 'Z': c -= 13
    s1 += c
    print(c)
print(s1)
4

2 回答 2

2

例如,要解码一个rot13编码字符串,s只需rot13再次获取该字符串,即计算rot13(s)

如果您不熟悉如何rot13在 python 中进行计算,请尝试使用 Google 搜索一下,您一定会找到的。我用谷歌搜索并找到了一个效果很好的解决方案:https ://stackoverflow.com/a/3269756/3293087 [请注意,它仅适用于 python2 而不是 python3,因为string.maketrans已从 python3 中删除。]

为了完整起见,我将在这里编写代码:

# Python 2 solution
import string
rot13Table = string.maketrans( 
    "ABCDEFGHIJKLMabcdefghijklmNOPQRSTUVWXYZnopqrstuvwxyz", 
    "NOPQRSTUVWXYZnopqrstuvwxyzABCDEFGHIJKLMabcdefghijklm")
rot13 = lambda s : string.translate(s, rot13Table)

print rot13("Hello World!") 
# Outputs "Uryyb Jbeyq!"

注意:我不会编写与 OP 最初发布的内容相对应的解码字符串,因为它非常冒犯和恐同。有兴趣的可以自己做。

更新:我还从这个 SO 答案中找到了适用于 python 2 和 3 的解决方案。事实证明,模块rot13中的 python 中有一个内置编码器:codecs

# Python 2 & 3 compatible
import codecs
rot13 = lambda s : codecs.getencoder("rot-13")(s)[0]

# Answer
rot13("Gur dhvpx oebja sbk whzcrq bire gur ynml qbt")

更新 2:由于 OP 坚持要知道答案并且似乎没有安装 python,我有一个创建的 JS 解决方案 https://codepen.io/anon/pen/zPYVQP。其他人请谨慎行事。

于 2017-10-29T17:11:34.130 回答
0
import string #use this package
utf8=string.maketrans("NOPQRSTUVWXYZnopqrstuvwxyzABCDEFGHIJKLMabcdefghijklm","ABCDEFGHIJKLMabcdefghijklmNOPQRSTUVWXYZnopqrstuvwxyz") #this are the related alphabets
print(string.translate("Gur dhvpx oebja sbk whzcrq bire gur ynml qbt", utf8))
于 2017-10-29T16:42:06.977 回答