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