简短的rot13函数 - Python

82 投票
20 回答
149129 浏览
提问于 2025-04-16 01:25

我在找一个简短又酷炫的 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!'

撰写回答