Python 翻译多个字符

sam*_*ins 4 python string translate python-3.x

我正在尝试在 python 3.3.3 中创建一个程序,该程序将接受一个字符串,然后将其转换为数字 (1-26)

我知道如何为一位数而不是 2 位做这件事

translist = str.maketrans("123456789", "ABCDEFGHI")
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点

Mar*_*ers 6

你不能为所欲为str.translate();仅适用于一对一替换。您正在尝试用两个不同的字符替换一个字符。

您可以改用正则表达式:

re.sub('[A-Z]', lambda m: str(ord(m.group()) - 64), inputstring)
Run Code Online (Sandbox Code Playgroud)

这需要每个字母的 ASCII 代码点并减去 64(A在 ASCII 标准中是 65)。

请注意,这可能会导致一些令人困惑的模棱两可的解释:

>>> import re
>>> inputstring = 'FOO BAR BAZ'
>>> re.sub('[A-Z]', lambda m: str(ord(m.group()) - 64), inputstring)
'61515 2118 2126'
Run Code Online (Sandbox Code Playgroud)

那是6 1 5 1 5还是6 15 15第一组数字?您可能想要 0-pad 您的数字:

re.sub('[A-Z]', lambda m: format(ord(m.group()) - 64, '02d'), inputstring)
Run Code Online (Sandbox Code Playgroud)

它产生:

>>> re.sub('[A-Z]', lambda m: format(ord(m.group()) - 64, '02d'), inputstring)
'061515 020118 020126'
Run Code Online (Sandbox Code Playgroud)