你不能做你想做的事str.translate()
;这只适用于一对一的替换。您正在尝试将一个字符替换为两个不同的角色 here.
您可以使用正则表达式来代替:
re.sub('[A-Z]', lambda m: str(ord(m.group()) - 64), inputstring)
这需要每个字母的 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'
Is that 6 1 5 1 5
or 6 15 15
对于第一组数字?您可能需要用 0 填充您的数字:
re.sub('[A-Z]', lambda m: format(ord(m.group()) - 64, '02d'), inputstring)
其产生:
>>> re.sub('[A-Z]', lambda m: format(ord(m.group()) - 64, '02d'), inputstring)
'061515 020118 020126'