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

时间:2017-09-17 08:42:10

标签: python binary calculation

与主题相同,我正在使用条带将字符串转换为值。 当基数小于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)会解决我的问题,但我正在寻找一个解决方案来构建我的脚本。

1 个答案:

答案 0 :(得分:0)

您可以使用enumerate代替ziprange

您可以使用dict将字符转换为int:

>>> {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