我在python中有一个rot13
编码的字符串,我必须对它进行解码:
"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)
要解码rot13
编码的字符串,比如s
,只需再次取该字符串的rot13
,即计算rot13(s)
。
如果你不熟悉如何在python中计算rot13
,试着在谷歌上搜索一下,你肯定会找到一个。我在谷歌上搜索了一下,找到了一个效果很好的解决方案:https://stackoverflow.com/a/3269756/3293087[注意,由于string.maketrans
已从python3中删除,因此它仅适用于python2,而不适用于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最初发布的内容相对应的解码字符串,因为它非常冒犯和恐同。任何感兴趣的人都可以自己做。
更新:我还找到了一个适用于python2&3都来自这个SO的答案。事实证明,在codecs
模块中,python中有一个内置的rot13
编码器:
# 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.其他人请谨慎行事。
utf8 = str.maketrans(
# this are the related alphabets
"NOPQRSTUVWXYZnopqrstuvwxyzABCDEFGHIJKLMabcdefghijklm",
"ABCDEFGHIJKLMabcdefghijklmNOPQRSTUVWXYZnopqrstuvwxyz",
)
print(str.translate("Gur dhvpx oebja sbk whzcrq bire gur ynml qbt", utf8))