简短的rot13函数 - Python
我在找一个简短又酷炫的 Python 中的 rot13 函数 ;-)
我写了这个函数:
def rot13(s):
chars = "abcdefghijklmnopqrstuvwxyz"
trans = chars[13:]+chars[:13]
rot_char = lambda c: trans[chars.find(c)] if chars.find(c)>-1 else c
return ''.join( rot_char(c) for c in s )
有没有人能帮我改进一下?比如说支持大写字母。
20 个回答
67
这个在Python 2上可以用(但在Python 3上不行):
>>> 'foobar'.encode('rot13')
'sbbone'
172
这很简单:
>>> import codecs
>>> codecs.encode('foobar', 'rot_13')
'sbbone'
88
maketrans()
和translate()
的解决方案…
Python 2.x
import string
rot13 = string.maketrans(
"ABCDEFGHIJKLMabcdefghijklmNOPQRSTUVWXYZnopqrstuvwxyz",
"NOPQRSTUVWXYZnopqrstuvwxyzABCDEFGHIJKLMabcdefghijklm")
string.translate("Hello World!", rot13)
# 'Uryyb Jbeyq!'
Python 3.x
rot13 = str.maketrans(
'ABCDEFGHIJKLMabcdefghijklmNOPQRSTUVWXYZnopqrstuvwxyz',
'NOPQRSTUVWXYZnopqrstuvwxyzABCDEFGHIJKLMabcdefghijklm')
'Hello World!'.translate(rot13)
# 'Uryyb Jbeyq!'