【问题标题】:converting a string in base greater than 10 in python 3在python 3中转换基数大于10的字符串
【发布时间】:2018-02-25 23:34:44
【问题描述】:

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

【问题讨论】:

  • 您是对的,您不能使用int,但您可以在字典 中查找这些值,并将字母映射到值。例如,import string; print(dict(enumerate(string.ascii_lowercase, 10)))

标签: python binary calculation


【解决方案1】:

您可以使用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

【讨论】:

  • @derec:很高兴。随意接受答案以表明它回答了您的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多