簡體   English   中英

在python 3中以大於10的基數轉換字符串

[英]converting a string in base greater than 10 in python 3

與主題相同,我正在研究將字符串轉換為值的地帶。 當基數小於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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM