在 python 3 中转换基数大于 10 的字符串

converting a string in base greater than 10 in python 3

和题目一样,我正在做一个将字符串转换为值的strip。 当基数小于 10 时:

s = "" # string for example: "123", "a2b"
base = int() #2,10, 16, 32
a = len(s)
for i, j in zip(s[::-1], range(0, a)):
    x += int(i)*base**int(j)
print (x)

但是对于大于 10 的基数,我意识到数字将显示为 1, .....10, a, b, c, d, ..., j, ... 我的脚本不会'不工作,因为一个字母没有被赋予任何价值。我也明白 int(s, base) 会解决我的问题,但我正在寻找一个解决方案来组成我的脚本。

您可以使用 enumerate 代替 ziprange

您可以使用字典将字符转换为整数:

>>> {c:i for i,c in enumerate('0123456789abcdef')}
{'a': 10, 'c': 12, 'b': 11, 'e': 14, 'd': 13, 'f': 15, '1': 1, '0': 0, '3': 3, '2': 2, '5': 5, '4': 4, '7': 7, '6': 6, '9': 9, '8': 8}

以 16 进制为例:

s = "abc"
base = 16
x = 0
hexa_table = {c:i for i,c in enumerate('0123456789abcdef')}
for i, c in enumerate(s[::-1]):
    x += hexa_table.get(c)*base**i
print(x)
# 2748

这似乎是正确的结果:

>>> int("abc", 16)
2748

您还可以使用 sum 来获得更短的代码:

print(sum(hexa_table.get(c)*base**i for i, c in enumerate(s[::-1])))
# 2748