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)
有没有办法做到这一点
你不能为所欲为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)