我知道有一個內置函數將二進制轉換爲十進制,但我想我自己挑戰自己並做出自己的想法。如何在將二進制轉換爲十進制時避免無效令牌
這裏是代碼:
def binaryToDecimal(binary):
binaryList = list(str(binary))
exponent = len(binaryList) - 1
decimal = 0
for char in binaryList:
bit = int(char)
decimal += bit * (2 ** exponent)
exponent -= 1
print(decimal)
的問題是,我必須使用前綴0b,避免無效的令牌,我知道,如果我要開始我的二進制0,但它使我的問題。它不轉換的最後1左側
binaryToDecimal(0b010001110)
因此它輸出的14,而不是142
我該如何解決呢?也有我可以說的一種方式
binaryToDecimal(010001110)
沒有得到一個無效的令牌,而不使用0b前綴?
我使用Python 3.5
我不是當然如果你知道的話,但是'0b010001110'在內部沒有任何區別,它與'142'不同。它們都被存儲爲完全普通的整數。 'list(str(0b010001110))'只是給你'['1','4','2']'。 – Kevin
'list(str(0b010001110))'不會做你認爲它做的事。 –
他們說什麼。你得到14是因爲'exponent'從2開始,14 = 4 * 1 + 2 * 4 + 2。如果你真的想做自己的二進制轉換函數,你需要將二進制arg作爲字符串傳遞,例如「010001110」。或者,正如Aaron所建議的那樣,可以是整數的位列表。 –