与主题相同,我正在使用条带将字符串转换为值。 当基数小于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)
会解决我的问题,但我正在寻找一个解决方案来构建我的脚本。
答案 0 :(得分:0)
您可以使用enumerate
代替zip
和range
。
您可以使用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