2014-02-13 3 views
4

Мне нужно преобразовать двоичный вход в десятичное целое. Я знаю, как перейти от десятичной к двоичной:Преобразование двоичного в десятичный целочисленный вывод

n = int(raw_input('enter a number: ')) 
print '{0:b}'.format(n) 

Мне нужно идти в обратном направлении. Мой профессор сказал, что когда он проверяет наш код, он собирается ввести 11001, и он должен получить 25 назад. Я просмотрел наши заметки, и я не могу понять, как это сделать. Google и другие интернет-ресурсы также не помогли.

Самая большая проблема заключается в том, что нам не разрешено использовать встроенные функции. Я понимаю, почему нам не разрешено использовать их, но это затрудняет эту проблему, поскольку я знаю, что Python имеет встроенную функцию для двоичного кода до десятичной.

+0

Check [это] (https: // StackOverflow.com/questions/35450560/how-to-use-python-to-convert-a-octal-to-decimal/47823029 # 47823029). Ответ от Грейс Л. Самсон может быть полезен –

ответ

14

Вы можете использовать int и установить базу для 2 (двоичный):

>>> binary = raw_input('enter a number: ') 
enter a number: 11001 
>>> int(binary, 2) 
25 
>>> 

Однако, если вы не можете использовать int подобное, то вы всегда можете сделать это:

binary = raw_input('enter a number: ') 
decimal = 0 
for digit in binary: 
    decimal = decimal*2 + int(digit) 
print decimal 

Ниже приводится демонстрация:

>>> binary = raw_input('enter a number: ') 
enter a number: 11001 
>>> decimal = 0 
>>> for digit in binary: 
...  decimal = decimal*2 + int(digit) 
... 
>>> print decimal 
25 
>>> 
+0

что-то говорит мне, что его профессор хочет, чтобы он сам написал конвертер, а затем использовал существующую функцию. Upvote для элегантного решения, хотя – OutFall

+0

Именно то, что сказал N0ir. Я отредактировал сообщение, чтобы уточнить это. В противном случае эта проблема будет намного проще. – purlinka

+0

@iCodez - Я попробовал код, добавленный в отредактированный пост. Почему-то это не работает? Говорит, что это недопустимый синтаксис. (Спасибо за помощь, кстати) – purlinka

2

Если вы хотите/должны сделать это без int:

sum(int(c) * (2 ** i) for i, c in enumerate(s[::-1])) 

Это переворачивает строку (s[::-1]), получает каждый символ c и его индекс i (for i, c in enumerate(), умножает число символа (int(c)) двумя значениями мощности индекса (2 ** i), затем добавляет их все вместе (sum()).

0

Я начал работать над этой проблемой давным-давно, пытаясь написать свою собственную двоичную функцию с десятичным преобразователем. Я действительно не знаю, как преобразовать десятичную в двоичную! Я просто пересмотрел его сегодня и понял, и это то, что я придумал. Я не уверен, если это то, что вам нужно, но вот это:

def __degree(number): 
    power = 1 

    while number % (10**power) != number: 
     power += 1 

    return power 

def __getDigits(number): 
    digits = [] 
    degree = __degree(number) 

    for x in range(0, degree): 
     digits.append(int(((number % (10**(degree-x))) - (number % (10**(degree-x-1))))/(10**(degree-x-1)))) 
    return digits 

def binaryToDecimal(number): 
    list = __getDigits(number) 
    decimalValue = 0 
    for x in range(0, len(list)): 
     if (list[x] is 1): 
      decimalValue += 2**(len(list) - x - 1) 
    return decimalValue 

Опять же, я все еще учусь Python только самостоятельно, надеюсь, что это помогает. Первая функция определяет, сколько цифр есть, вторая функция фактически вычисляет их и возвращает их в списке, а третья функция - единственная, которую вы действительно должны вызывать, и вычисляет десятичное значение. Если ваш учитель действительно хотел, чтобы вы создали свой собственный конвертер, это работает, я не тестировал его с каждым номером, но, похоже, он работает отлично! Я уверен, что вы все найдете ошибки для меня! Так или иначе, я просто назвал это так:

binaryNum = int(input("Enter a binary number: ")) 

print(binaryToDecimal(binaryNum)) 

Это печатает правильный результат. Ура!

0

Ввод может быть строкой или целым числом.

num = 1000 #or num = '1000' 
sum(map(lambda x: x[1]*(2**x[0]), enumerate(map(int, str(num))[::-1]))) 

# 8 
0

Это полная вещь

binary = input('enter a number: ') 
decimal = 0 
for digit in binary: 
decimal= decimal*2 + int(digit) 

print (decimal) 
Смежные вопросы