将两个字母的字符串转换为 3 位数字

Convert a two-letter String to a 3-digit number

我正在处理软件问题,我发现自己需要将 2 个字母的字符串转换为 3 位数字。我们只讨论英文字母表(26 个字母)。

所以基本上我需要将 AA、AR、ZF、ZZ 等内容转换为 0-999 范围内的数字。 我们有 676 种字母组合和 1000 种数字组合,因此涵盖了范围。 现在,我可以手动写一张地图,说 AA = 1,AB = 2 等,但我想知道是否有更好、更“数学”或“逻辑”的解决方案。 数字的顺序当然无关紧要,只要从字母到数字的转换是唯一的并且总是产生相同的结果即可。

转换应该双向进行(从字母到数字以及从数字到字母)。

有人有想法吗? 非常感谢

如果您不必使用连续的数字,您可以将两个字母的字符串视为基于 36 的数字。因此,您可以使用 int 函数将其转换为 Integer。

int('AA', 36)  # 370
int('AB', 36)  # 371
#...
int('ZY', 36)  #  1294
int('ZZ', 36)  #  1295

关于如何将数字转回字符串,可以参考How to convert an integer to a string in any base?

上的方法

@furry12 因为第一个和最后一个之间的差异是 1295-370=925<999。很幸运,所以你可以将每个数字减去300,结果将在0-999

的范围内
def str2num(s):
  return int(s, 36) - 300

print(str2num('AA')) # 70
print(str2num('ZZ')) # 995

将 A-Z 视为 27 进制的 1-26,0 保留为空格。

例如'CD' -> 3 * 27 + 4 = 85

85 -> 85 / 27, 85 % 27 = 3, 4 = C, D