Я знаю, что есть встроенная функция преобразования двоичного кода в десятичный, но я думал, что брошу вызов себе и сделаю свое.Как избежать недопустимого токена при преобразовании двоичного в десятичный
Вот коды:
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)
Проблема заключается в том, что я знаю, если я хочу, чтобы начать свой двоичный файл с 0, я должен использовать префикс 0b, чтобы избежать недопустимую фишки, но это приводит меня к проблеме , Он не преобразует последний 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. Если вы _really_ хотите выполнить свою собственную функцию двоичного преобразования, вам нужно передать двоичный arg в качестве строки, например, '010001110''. Или, как предлагает Аарон, список битов, которые могут быть целыми числами. –