在 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
代替 zip
和 range
。
您可以使用字典将字符转换为整数:
>>> {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
和题目一样,我正在做一个将字符串转换为值的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
代替 zip
和 range
。
您可以使用字典将字符转换为整数:
>>> {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